From 5e6b2b2c08c50a9cc8f5ebded02e3111c232a574 Mon Sep 17 00:00:00 2001 From: rsteube Date: Sat, 21 Sep 2024 16:06:03 +0200 Subject: [PATCH] action: added `UnlessF` --- action.go | 14 ++- docs/src/SUMMARY.md | 1 + docs/src/carapace/action/unless.cast | 118 +++++++++++++------------- docs/src/carapace/action/unless.md | 28 +++--- docs/src/carapace/action/unlessF.cast | 59 +++++++++++++ docs/src/carapace/action/unlessF.md | 19 +++++ example/cmd/modifier.go | 22 ++++- example/cmd/modifier_test.go | 41 ++++++--- 8 files changed, 218 insertions(+), 84 deletions(-) create mode 100644 docs/src/carapace/action/unlessF.cast create mode 100644 docs/src/carapace/action/unlessF.md diff --git a/action.go b/action.go index 721053f65..3c3a3201c 100644 --- a/action.go +++ b/action.go @@ -453,8 +453,18 @@ func (a Action) UniqueListF(divider string, f func(s string) string) Action { }) } -// Unless skips invokation if given condition succeeds. -func (a Action) Unless(condition func(c Context) bool) Action { +// Unless skips invokation if given condition is true. +func (a Action) Unless(condition bool) Action { + return ActionCallback(func(c Context) Action { + if condition { + return ActionValues() + } + return a + }) +} + +// UnlessF skips invokation if given condition returns true. +func (a Action) UnlessF(condition func(c Context) bool) Action { return ActionCallback(func(c Context) Action { if condition(c) { return ActionValues() diff --git a/docs/src/SUMMARY.md b/docs/src/SUMMARY.md index 400533583..569fa62eb 100644 --- a/docs/src/SUMMARY.md +++ b/docs/src/SUMMARY.md @@ -39,6 +39,7 @@ - [UniqueList](./carapace/action/uniqueList.md) - [UniqueListF](./carapace/action/uniqueListF.md) - [Unless](./carapace/action/unless.md) + - [UnlessF](./carapace/action/unlessF.md) - [Usage](./carapace/action/usage.md) - [UsageF](./carapace/action/usageF.md) - [InvokedAction](./carapace/invokedAction.md) diff --git a/docs/src/carapace/action/unless.cast b/docs/src/carapace/action/unless.cast index 6330283ea..b29ec0a0a 100644 --- a/docs/src/carapace/action/unless.cast +++ b/docs/src/carapace/action/unless.cast @@ -1,60 +1,58 @@ -{"version": 2, "width": 108, "height": 24, "timestamp": 1704580675, "env": {"SHELL": "elvish", "TERM": "tmux-256color"}} -[0.077611, "o", "\u001b[?7h\u001b[7m⏎\u001b[m \r \r\u001b[?7l\u001b[?2004h"] -[0.078303, "o", "\u001b[?25l\r???> ???> \r\u001b[5C\u001b[?25h\u001b[?25l\r\u001b[5C\u001b[K\r\u001b[5C\u001b[?25h"] -[0.092405, "o", "\u001b[?25l\r\r\u001b[5C\u001b[?25h"] -[0.092532, "o", "\u001b[?25l\r\u001b[K\u001b[0;1;36m~\u001b[0;m \r\n\u001b[0;1;37mesh\u001b[0;m \u001b[0;1;32m❯\u001b[0;m \r\u001b[6C\u001b[?25h"] -[0.501527, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[6C\u001b[0;32me\u001b[0;m\r\u001b[7C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[7C\u001b[?25h"] -[0.502665, "o", "\u001b[?25l\u001b[1A\r\r\n\r\u001b[7C\u001b[?25h"] -[0.514318, "o", "\u001b[?25l\u001b[1A\r\r\n\r\u001b[7C\u001b[?25h"] -[0.514567, "o", "\u001b[?25l\u001b[1A\r\r\n\r\u001b[7C\u001b[?25h"] -[0.729453, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[6C\u001b[K\u001b[0;31mex\u001b[0;m\r\u001b[8C\u001b[?25h"] -[0.934243, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[6C\u001b[K\u001b[0;32mexa\u001b[0;m\r\u001b[9C\u001b[?25h"] -[0.934401, "o", "\u001b[?25l\u001b[1A\r\r\n\r\u001b[9C\u001b[?25h"] -[0.935079, "o", "\u001b[?25l\u001b[1A\r\r\n\r\u001b[9C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[9C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[9C\u001b[?25h"] -[1.078257, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[6C\u001b[K\u001b[0;31mexam\u001b[0;m\r\u001b[10C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[10C\u001b[?25h"] -[1.130292, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[10C\u001b[0;31mp\u001b[0;m\r\u001b[11C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[11C\u001b[?25h"] -[1.277002, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[11C\u001b[0;31ml\u001b[0;m\r\u001b[12C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[12C\u001b[?25h"] -[1.319499, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[6C\u001b[K\u001b[0;32mexample\u001b[0;m\r\u001b[13C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[13C\u001b[?25h"] -[1.392949, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[13C \r\u001b[14C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[14C\u001b[?25h"] -[1.931041, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[14C\u001b[0;4maction \r\n\u001b[0;1;37;45m COMPLETING argument \u001b[0;m \r\n\u001b[0;7;34maction\u001b[0;2;7m (action example) \r\n\u001b[0;34malias\u001b[0;2m (action example) \r\n\u001b[0;mchain\u001b[0;2m (shorthand chain) \r\n\u001b[0;mcompat \r\ncompletion\u001b[0;2m (Generate the autocompletion script for the specified shell)\r\n\u001b[0;34mflag\u001b[0;2m (flag example) \r\n\u001b[0;mgroup\u001b[0;2m (group example) \r\n\u001b[0;mhelp\u001b[0;2m (Help about any command) \r\n\u001b[0;minterspersed\u001b[0;2m (interspersed example) \r\n\u001b[0;33mmodifier\u001b[0;2m (modifier example) \r\n\u001b[0;mmultiparts\u001b[0;2m (multiparts example) \r\n\u001b[0;35mplugin\u001b[0;2m (dynamic plugin command) \r\n\u001b[0;mspecial \r\nsubcommand\u001b[0;2m (subcommand example) \u001b[0;m\u001b[14A\r\u001b[22C\u001b[?25h"] -[2.258815, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[22Cm\r\n\r\n\r\n\u001b[1C\u001b[Kompat \r\n\u001b[4C\u001b[Kletion\u001b[0;2m (Generate the autocompletion script for the specified shell)\r\n\u001b[0;m\u001b[K\u001b[0;34mflag\u001b[0;2m (flag example) \r\n\u001b[0;m\u001b[Kgroup\u001b[0;2m (group example) \r\n\u001b[0;m\u001b[Khelp\u001b[0;2m (Help about any command) \r\n\u001b[0;m\u001b[Kinterspersed\u001b[0;2m (interspersed example) \r\n\u001b[0;m\u001b[K\u001b[0;33mmodifier\u001b[0;2m (modifier example) \r\n\u001b[0;m\u001b[Kmultiparts\u001b[0;2m (multiparts example) \r\n\u001b[0;m\u001b[K\u001b[0;35mplugin\u001b[0;2m (dynamic plugin command) \r\n\u001b[0;m\u001b[Ksubcommand\u001b[0;2m (subcommand example) \u001b[0;m\r\n\u001b[J\u001b[A\u001b[12A\r\u001b[23C\u001b[?25h"] -[2.259838, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[12A\r\u001b[23C\u001b[?25h"] -[2.330185, "o", "\u001b[?25l\u001b[2A\r\r\n\u001b[14C\u001b[K\u001b[0;4mmodifier \r\n\u001b[23C\u001b[0;mo\r\n\u001b[K\u001b[0;7;33mmodifier\u001b[0;2;7m (modifier example)\u001b[0;m\r\n\u001b[J\u001b[A\u001b[1A\r\u001b[24C\u001b[?25h"] -[2.333674, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\n\u001b[1A\r\u001b[24C\u001b[?25h"] -[2.333998, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\n\u001b[1A\r\u001b[24C\u001b[?25h\u001b[?25l\u001b[2A\r\r\n\r\n\r\n\u001b[1A\r\u001b[24C\u001b[?25h"] -[2.450807, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\u001b[24Cd\r\n\u001b[1A\r\u001b[25C\u001b[?25h\u001b[?25l\u001b[2A\r\r\n\r\n\r\n\u001b[1A\r\u001b[25C\u001b[?25h"] -[2.911046, "o", "\u001b[?25l\u001b[2A\r\r\n\u001b[14C\u001b[Kmodifier \r\n\u001b[J\u001b[A\r\u001b[23C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[23C\u001b[?25h"] -[3.501728, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[23C-\r\u001b[24C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[24C\u001b[?25h"] -[3.63236, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[24C-\r\u001b[25C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[25C\u001b[?25h"] -[3.755864, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[23C\u001b[K\u001b[0;4m--batch \r\n\u001b[0;1;37;45m COMPLETING argument \u001b[0;m \r\n\u001b[0;7;34m--batch\u001b[0;2;7m (Batch()) \u001b[0;m \u001b[0;34m--retain\u001b[0;2m (Retain()) \r\n\u001b[0;34m--cache\u001b[0;2m (Cache()) \u001b[0;m \u001b[0;34m--shift\u001b[0;2m (Shift()) \r\n\u001b[0;34m--cache-key\u001b[0;2m (Cache()) \u001b[0;m \u001b[0;34m--split\u001b[0;2m (Split()) \r\n\u001b[0;34m--chdir\u001b[0;2m (Chdir()) \u001b[0;m \u001b[0;34m--splitp\u001b[0;2m (SplitP()) \r\n\u001b[0;34m--chdirf\u001b[0;2m (ChdirF()) \u001b[0;m \u001b[0;34m--style\u001b[0;2m (Style()) \r\n\u001b[0;34m--filter\u001b[0;2m (Filter()) \u001b[0;m \u001b[0;34m--stylef\u001b[0;2m (StyleF()) \r\n\u001b[0;34m--filterargs\u001b[0;2m (FilterArgs()) \u001b[0;m \u001b[0;34m--styler\u001b[0;2m (StyleR()) \r\n\u001b[0;34m--filterparts\u001b[0;2m (FilterParts()) \u001b[0;m \u001b[0;34m--suffix\u001b[0;2m (Suffix()) \r\n\u001b[0;m--help\u001b[0;2m (help for modifier) \u001b[0;m \u001b[0;34m--suppress\u001b[0;2m (Suppress()) \r\n\u001b[0;34m--invoke\u001b[0;2m (Invoke()) \u001b[0;m \u001b[0;34m--tag\u001b[0;2m (Tag()) \r\n\u001b[0;34m--list\u001b[0;2m (List()) \u001b[0;m \u001b[0;34m--tagf\u001b[0;2m (TagF()) \r\n\u001b[0;34m--multiparts\u001b[0;2m (MultiParts()) \u001b[0;m \u001b[0;34m--timeout\u001b[0;2m (Timeout()) \r\n\u001b[0;34m--multipartsp\u001b[0;2m (MultiPartsP()) \u001b[0;m \u001b[0;34m--uniquelist\u001b[0;2m (UniqueList()) \r\n\u001b[0;34m--nospace\u001b[0;2m (NoSpace()) \u001b[0;m \u001b[0;34m--uniquelistf\u001b[0;2m (UniqueListF())\r\n\u001b[0;33m--persistentFlag\u001b[0;2m (Help message for persistentFlag) \u001b[0;m \u001b[0;34m--unless\u001b[0;2m (Unless()) \r\n\u001b[0;34m--persistentFlag2\u001b[0;2m (Help message for persistentFlag2)\u001b[0;m \u001b[0;34m--usage\u001b[0;2m (Usage()) \r\n\u001b[0;34m--prefix\u001b[0;2m (Prefix()) \u001b[0;m\u001b[17A\r\u001b[22C\u001b[?25h"] -[3.757363, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[17A\r\u001b[22C\u001b[?25h"] -[4.121816, "o", "\u001b[?25l\u001b[2A\r\r\n\u001b[25C\u001b[K\u001b[0;4mmultiparts \r\n\u001b[22C\u001b[0;mu\r\n\u001b[2C\u001b[K\u001b[0;7;34mmultiparts\u001b[0;2;7m (MultiParts()) \u001b[0;m \u001b[0;34m--suppress\u001b[0;2m (Suppress()) \u001b[0;m \u001b[0;34m--uniquelistf\u001b[0;2m (UniqueListF())\r\n\u001b[2C\u001b[0;m\u001b[K\u001b[0;34mmultipartsp\u001b[0;2m (MultiPartsP())\u001b[0;m \u001b[0;34m--timeout\u001b[0;2m (Timeout()) \u001b[0;m \u001b[0;34m--unless\u001b[0;2m (Unless()) \r\n\u001b[2C\u001b[0;m\u001b[K\u001b[0;34msuffix\u001b[0;2m (Suffix()) \u001b[0;m \u001b[0;34m--uniquelist\u001b[0;2m (UniqueList())\u001b[0;m \u001b[0;34m--usage\u001b[0;2m (Usage()) \u001b[0;m\r\n\u001b[J\u001b[A\u001b[3A\r\u001b[23C\u001b[?25h"] -[4.297384, "o", "\u001b[?25l\u001b[2A\r\r\n\u001b[25C\u001b[K\u001b[0;4muniquelist \r\n\u001b[23C\u001b[0;mn\r\n\u001b[2C\u001b[K\u001b[0;7;34muniquelist\u001b[0;2;7m (UniqueList())\u001b[0;m \u001b[0;34m--uniquelistf\u001b[0;2m (UniqueListF())\u001b[0;m \u001b[0;34m--unless\u001b[0;2m (Unless())\u001b[0;m\r\n\u001b[J\u001b[A\u001b[1A\r\u001b[24C\u001b[?25h\u001b[?25l\u001b[2A\r\r\n\r\n\r\n\u001b[1A\r\u001b[24C\u001b[?25h"] -[4.368639, "o", "\u001b[?25l\u001b[2A\r\r\n\u001b[27C\u001b[K\u001b[0;4mless \r\n\u001b[24C\u001b[0;ml\r\n\u001b[4C\u001b[K\u001b[0;7;34mless\u001b[0;2;7m (Unless())\u001b[0;m\u001b[1A\r\u001b[25C\u001b[?25h\u001b[?25l\u001b[2A\r\r\n\r\n\r\n\u001b[1A\r\u001b[25C\u001b[?25h"] -[5.060184, "o", "\u001b[?25l\u001b[2A\r\r\n\u001b[23C\u001b[K--unless \r\n\u001b[J\u001b[A\r\u001b[32C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[32C\u001b[?25h"] -[5.459028, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[32C\u001b[0;4m./local \r\n\u001b[0;1;37;45m COMPLETING argument \u001b[0;m \r\n\u001b[0;7m./local\u001b[0;m /abs one three two ~/home\u001b[1A\r\u001b[22C\u001b[?25h"] -[7.834727, "o", "\u001b[?25l\u001b[2A\r\r\n\u001b[32C\u001b[K\r\n\u001b[J\u001b[A\r\u001b[32C\u001b[?25h"] -[8.483363, "o", "\u001b[?25l\u001b[1A\rUnbound key: Alt-t\u001b[K\r\n\u001b[K\u001b[0;1;36m~\u001b[0;m \r\n\u001b[0;1;37mesh\u001b[0;m \u001b[0;1;32m❯\u001b[0;m \u001b[0;32mexample\u001b[0;m modifier --unless \r\u001b[32C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[32C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[32C\u001b[?25h"] -[9.179995, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[32Ct\r\u001b[33C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[33C\u001b[?25h"] -[9.677383, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[32C\u001b[K\u001b[0;4mthree \r\n\u001b[0;1;37;45m COMPLETING argument \u001b[0;m \r\n\u001b[0;7mthree\u001b[0;m two\u001b[1A\r\u001b[22C\u001b[?25h"] -[10.781412, "o", "\u001b[?25l\u001b[2A\r\r\n\u001b[32C\u001b[Kt\r\n\u001b[J\u001b[A\r\u001b[33C\u001b[?25h"] -[11.425598, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[32C\u001b[K\r\u001b[32C\u001b[?25h"] -[11.713544, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[32C/\r\u001b[33C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[33C\u001b[?25h"] -[11.91868, "o", "\u001b[?25l\u001b[1A\r\u001b[0;2musage: \u001b[0;mUnless()\u001b[K\r\n\u001b[0;31merror:\u001b[0;m no candidates\u001b[K\r\n\u001b[K\u001b[0;1;36m~\u001b[0;m \r\n\u001b[0;1;37mesh\u001b[0;m \u001b[0;1;32m❯\u001b[0;m \u001b[0;32mexample\u001b[0;m modifier --unless /\r\u001b[33C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[33C\u001b[?25h"] -[12.885206, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[32C\u001b[K\r\u001b[32C\u001b[?25h"] -[13.300142, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[32C~\r\u001b[33C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[33C\u001b[?25h"] -[13.682684, "o", "\u001b[?25l\u001b[1A\r\u001b[0;2musage: \u001b[0;mUnless()\u001b[K\r\n\u001b[0;31merror:\u001b[0;m no candidates\u001b[K\r\n\u001b[K\u001b[0;1;36m~\u001b[0;m \r\n\u001b[0;1;37mesh\u001b[0;m \u001b[0;1;32m❯\u001b[0;m \u001b[0;32mexample\u001b[0;m modifier --unless ~\r\u001b[33C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[33C\u001b[?25h"] -[14.234812, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[32C\u001b[K\r\u001b[32C\u001b[?25h"] -[14.536332, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[32C.\r\u001b[33C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[33C\u001b[?25h"] -[14.745416, "o", "\u001b[?25l\u001b[1A\r\u001b[0;2musage: \u001b[0;mUnless()\u001b[K\r\n\u001b[0;31merror:\u001b[0;m no candidates\u001b[K\r\n\u001b[K\u001b[0;1;36m~\u001b[0;m \r\n\u001b[0;1;37mesh\u001b[0;m \u001b[0;1;32m❯\u001b[0;m \u001b[0;32mexample\u001b[0;m modifier --unless .\r\u001b[33C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[33C\u001b[?25h"] -[15.535869, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[32C\u001b[K\r\u001b[32C\u001b[?25h"] -[15.782019, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[32Co\r\u001b[33C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[33C\u001b[?25h"] -[15.911862, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[33Cne \r\u001b[36C\u001b[?25h"] -[16.916407, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[6C\u001b[K\r\u001b[6C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[6C\u001b[?25h"] -[16.917521, "o", "\u001b[?25l\u001b[1A\r\r\n\r\u001b[6C\u001b[?25h"] -[16.929318, "o", "\u001b[?25l\u001b[1A\r\r\n\r\u001b[6C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[6C\u001b[?25h"] -[17.205288, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[6C\u001b[0;32me\u001b[0;m\r\u001b[7C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[7C\u001b[?25h"] -[17.380397, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[6C\u001b[K\u001b[0;31mex\u001b[0;m\r\u001b[8C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[8C\u001b[?25h"] -[17.567313, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[8C\u001b[0;31mi\u001b[0;m\r\u001b[9C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[9C\u001b[?25h"] -[17.658512, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[6C\u001b[K\u001b[0;32mexit\u001b[0;m\r\u001b[10C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[10C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[10C\u001b[?25h"] -[17.773903, "o", "\u001b[?25l\u001b[1A\r\r\n\r\n\r\u001b[?25h\u001b[?7h\u001b[?2004l\r"] +{"version": 2, "width": 80, "height": 12, "timestamp": 1726929512, "env": {"SHELL": "elvish", "TERM": "tmux-256color"}} +[0.187401, "o", "\u001b[?7h\u001b[7m⏎\u001b[m \r \r\u001b[?7l\u001b[?2004h"] +[0.188217, "o", "\u001b[?25l\r???> ???> \r\u001b[5C\u001b[?25h\u001b[?25l\r\u001b[5C\u001b[K\r\u001b[5C\u001b[?25h"] +[0.203344, "o", "\u001b[?25l\r\r\u001b[5C\u001b[?25h"] +[0.203441, "o", "\u001b[?25l\r\u001b[K\u001b[0;1;36m~\u001b[0;m \r\n\u001b[0;1;37mesh\u001b[0;m \u001b[0;1;32m❯\u001b[0;m \r\u001b[6C\u001b[?25h"] +[0.794111, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[6C\u001b[0;31me\u001b[0;m\r\u001b[7C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[7C\u001b[?25h"] +[0.794538, "o", "\u001b[?25l\u001b[1A\r\r\n\r\u001b[7C\u001b[?25h"] +[0.809932, "o", "\u001b[?25l\u001b[1A\r\r\n\r\u001b[7C\u001b[?25h"] +[0.810117, "o", "\u001b[?25l\u001b[1A\r\r\n\r\u001b[7C\u001b[?25h"] +[0.99298, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[7C\u001b[0;31mx\u001b[0;m\r\u001b[8C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[8C\u001b[?25h"] +[1.128224, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[6C\u001b[K\u001b[0;32mexa\u001b[0;m\r\u001b[9C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[9C\u001b[?25h"] +[1.211414, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[6C\u001b[K\u001b[0;31mexam\u001b[0;m\r\u001b[10C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[10C\u001b[?25h"] +[1.274133, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[10C\u001b[0;31mp\u001b[0;m\r\u001b[11C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[11C\u001b[?25h"] +[1.37075, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[11C\u001b[0;31ml\u001b[0;m\r\u001b[12C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[12C\u001b[?25h"] +[1.485726, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[6C\u001b[K\u001b[0;32mexample\u001b[0;m\r\u001b[13C\u001b[?25h"] +[1.578389, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[13C \r\u001b[14C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[14C\u001b[?25h"] +[1.675582, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[14Cm\r\u001b[15C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[15C\u001b[?25h"] +[1.742452, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[15Co\r\u001b[16C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[16C\u001b[?25h"] +[1.871267, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[16Cdifier \r\u001b[23C\u001b[?25h"] +[2.154563, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[23C-\r\u001b[24C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[24C\u001b[?25h"] +[2.298987, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[24C-\r\u001b[25C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[25C\u001b[?25h"] +[2.404046, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[23C\u001b[K\u001b[0;4m--batch \r\n\u001b[0;1;37;45m COMPLETING argument \u001b[0;m \r\n\u001b[0;7;34m--batch\u001b[0;2;7m (Batch()) \u001b[0;m --help\u001b[0;2m (help for modifier) \r\n\u001b[0;34m--cache\u001b[0;2m (Cache()) \u001b[0;m \u001b[0;34m--invoke\u001b[0;2m (Invoke()) \r\n\u001b[0;34m--cache-key\u001b[0;2m (Cache()) \u001b[0;m \u001b[0;34m--list\u001b[0;2m (List()) \r\n\u001b[0;34m--chdir\u001b[0;2m (Chdir()) \u001b[0;m \u001b[0;34m--multiparts\u001b[0;2m (MultiParts()) \r\n\u001b[0;34m--chdirf\u001b[0;2m (ChdirF()) \u001b[0;m \u001b[0;34m--multipartsp\u001b[0;2m (MultiPartsP()) \r\n\u001b[0;34m--filter\u001b[0;2m (Filter()) \u001b[0;m \u001b[0;34m--nospace\u001b[0;2m (NoSpace()) \r\n\u001b[0;34m--filterargs\u001b[0;2m (FilterArgs()) \u001b[0;m \u001b[0;33m--persistentFlag\u001b[0;2m (Help message for persistentFlag\r\n\u001b[0;34m--filterparts\u001b[0;2m (FilterParts())\u001b[0;m \u001b[0;34m--persistentFlag2\u001b[0;2m (Help message for persistentFla\r\n\u001b[0;7;35m \u001b[0;35m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0;m\u001b[9A\r\u001b[22C\u001b[?25h"] +[2.724605, "o", "\u001b[?25l\u001b[2A\r\r\n\u001b[25C\u001b[K\u001b[0;4mmultiparts \r\n\u001b[22C\u001b[0;mu\r\n\u001b[2C\u001b[K\u001b[0;7;34mmultiparts\u001b[0;2;7m (MultiParts()) \u001b[0;m \u001b[0;34m--uniquelist\u001b[0;2m (UniqueList()) \r\n\u001b[2C\u001b[0;m\u001b[K\u001b[0;34mmultipartsp\u001b[0;2m (MultiPartsP())\u001b[0;m \u001b[0;34m--uniquelistf\u001b[0;2m (UniqueListF())\r\n\u001b[2C\u001b[0;m\u001b[K\u001b[0;34msuffix\u001b[0;2m (Suffix()) \u001b[0;m \u001b[0;34m--unless\u001b[0;2m (Unless()) \r\n\u001b[2C\u001b[0;m\u001b[K\u001b[0;34msuppress\u001b[0;2m (Suppress()) \u001b[0;m \u001b[0;34m--unlessf\u001b[0;2m (UnlessF()) \r\n\u001b[2C\u001b[0;m\u001b[K\u001b[0;34mtimeout\u001b[0;2m (Timeout()) \u001b[0;m \u001b[0;34m--usage\u001b[0;2m (Usage()) \u001b[0;m\r\n\u001b[J\u001b[A\u001b[5A\r\u001b[23C\u001b[?25h"] +[2.724983, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\n\r\n\r\n\r\n\r\n\u001b[5A\r\u001b[23C\u001b[?25h"] +[2.902198, "o", "\u001b[?25l\u001b[2A\r\r\n\u001b[25C\u001b[K\u001b[0;4muniquelist \r\n\u001b[23C\u001b[0;mn\r\n\u001b[2C\u001b[K\u001b[0;7;34muniquelist\u001b[0;2;7m (UniqueList()) \u001b[0;m \u001b[0;34m--unless\u001b[0;2m (Unless()) \r\n\u001b[2C\u001b[0;m\u001b[K\u001b[0;34muniquelistf\u001b[0;2m (UniqueListF())\u001b[0;m \u001b[0;34m--unlessf\u001b[0;2m (UnlessF())\u001b[0;m\r\n\u001b[J\u001b[A\u001b[2A\r\u001b[24C\u001b[?25h"] +[2.902656, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\n\r\n\u001b[2A\r\u001b[24C\u001b[?25h"] +[2.979654, "o", "\u001b[?25l\u001b[2A\r\r\n\u001b[27C\u001b[K\u001b[0;4mless \r\n\u001b[24C\u001b[0;ml\r\n\u001b[4C\u001b[K\u001b[0;7;34mless\u001b[0;2;7m (Unless())\u001b[0;m \u001b[0;34m--unlessf\u001b[0;2m (UnlessF())\u001b[0;m\r\n\u001b[J\u001b[A\u001b[1A\r\u001b[25C\u001b[?25h\u001b[?25l\u001b[2A\r\r\n\r\n\r\n\u001b[1A\r\u001b[25C\u001b[?25h"] +[3.576582, "o", "\u001b[?25l\u001b[2A\r\r\n\u001b[23C\u001b[K--unless \r\n\u001b[J\u001b[A\r\u001b[32C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[32C\u001b[?25h"] +[4.008338, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[32C\u001b[0;4mfalse:\r\n\u001b[0;1;37;45m COMPLETING argument \u001b[0;m \r\n\u001b[0;7mfalse\u001b[0;m true\u001b[1A\r\u001b[22C\u001b[?25h"] +[4.008934, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\n\u001b[1A\r\u001b[22C\u001b[?25h"] +[4.009049, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\n\u001b[1A\r\u001b[22C\u001b[?25h"] +[4.701162, "o", "\u001b[?25l\u001b[2A\r\r\n\u001b[32C\u001b[K\u001b[0;4mtrue:\r\n\r\n\u001b[0;m\u001b[Kfalse \u001b[0;7mtrue\u001b[0;m\u001b[1A\r\u001b[22C\u001b[?25h"] +[4.96287, "o", "\u001b[?25l\u001b[2A\r\r\n\u001b[32C\u001b[Ktrue:\r\n\u001b[J\u001b[A\r\u001b[37C\u001b[?25h"] +[4.963047, "o", "\u001b[?25l\u001b[1A\r\r\n\r\u001b[37C\u001b[?25h"] +[5.332419, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[32C\u001b[K\u001b[0;4mtrue:positive \r\n\u001b[0;1;37;45m COMPLETING argument \u001b[0;m \r\n\u001b[0;7mpositive\u001b[0;m yes\u001b[1A\r\u001b[22C\u001b[?25h"] +[6.174536, "o", "\u001b[?25l\u001b[2A\r\r\n\u001b[37C\u001b[K\u001b[0;4myes \r\n\r\n\u001b[0;m\u001b[Kpositive \u001b[0;7myes\u001b[0;m\u001b[1A\r\u001b[22C\u001b[?25h"] +[6.932675, "o", "\u001b[?25l\u001b[2A\r\r\n\u001b[32C\u001b[Ktrue:\r\n\u001b[J\u001b[A\r\u001b[37C\u001b[?25h"] +[7.284668, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[36C\u001b[K\r\u001b[36C\u001b[?25h"] +[7.447854, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[35C\u001b[K\r\u001b[35C\u001b[?25h"] +[7.601215, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[34C\u001b[K\r\u001b[34C\u001b[?25h"] +[7.765417, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[33C\u001b[K\r\u001b[33C\u001b[?25h"] +[7.918458, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[32C\u001b[K\r\u001b[32C\u001b[?25h"] +[8.033631, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[32C\u001b[0;4mfalse:\r\n\u001b[0;1;37;45m COMPLETING argument \u001b[0;m \r\n\u001b[0;7mfalse\u001b[0;m true\u001b[1A\r\u001b[22C\u001b[?25h"] +[8.647984, "o", "\u001b[?25l\u001b[2A\r\r\n\u001b[32C\u001b[Kfalse:\r\n\u001b[J\u001b[A\r\u001b[38C\u001b[?25h"] +[8.64845, "o", "\u001b[?25l\u001b[1A\r\r\n\r\u001b[38C\u001b[?25h"] +[8.995589, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[38Cn\r\u001b[39C\u001b[?25h"] +[8.996048, "o", "\u001b[?25l\u001b[1A\r\r\n\r\u001b[39C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[39C\u001b[?25h"] +[9.432356, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[32C\u001b[K\u001b[0;4mfalse:negative \r\n\u001b[0;1;37;45m COMPLETING argument \u001b[0;m \r\n\u001b[0;7mnegative\u001b[0;m no\u001b[1A\r\u001b[22C\u001b[?25h"] +[10.433244, "o", "\u001b[?25l\u001b[2A\r\r\n\u001b[39C\u001b[K\u001b[0;4mo \r\n\r\n\u001b[0;m\u001b[Knegative \u001b[0;7mno\u001b[0;m\u001b[1A\r\u001b[22C\u001b[?25h"] +[11.797437, "o", "\u001b[?25l\u001b[2A\r\r\n\u001b[6C\u001b[K\r\n\u001b[J\u001b[A\r\u001b[6C\u001b[?25h"] +[11.797901, "o", "\u001b[?25l\u001b[1A\r\r\n\r\u001b[6C\u001b[?25h"] +[11.798303, "o", "\u001b[?25l\u001b[1A\r\r\n\r\u001b[6C\u001b[?25h"] +[11.827134, "o", "\u001b[?25l\u001b[1A\r\r\n\r\u001b[6C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[6C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[6C\u001b[?25h"] +[12.302869, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[6C\u001b[0;31me\u001b[0;m\r\u001b[7C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[7C\u001b[?25h"] +[12.507808, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[7C\u001b[0;31mx\u001b[0;m\r\u001b[8C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[8C\u001b[?25h"] +[12.687604, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[8C\u001b[0;31mi\u001b[0;m\r\u001b[9C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[9C\u001b[?25h"] +[12.762443, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[6C\u001b[K\u001b[0;32mexit\u001b[0;m\r\u001b[10C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[10C\u001b[?25h"] +[12.918256, "o", "\u001b[?25l\u001b[1A\r\r\n\r\n\r\u001b[?25h\u001b[?7h\u001b[?2004l\r"] diff --git a/docs/src/carapace/action/unless.md b/docs/src/carapace/action/unless.md index 18b751c18..73e4c25fa 100644 --- a/docs/src/carapace/action/unless.md +++ b/docs/src/carapace/action/unless.md @@ -1,19 +1,27 @@ # Unless -[`Unless`] skips invokation if given [condition] succeeds. +[`Unless`] skips invokation if given condition is `true`. ```go -carapace.ActionValues( - "./local", - "~/home", - "/abs", - "one", - "two", - "three", -).Unless(condition.CompletingPath) +carapace.ActionMultiPartsN(":", 2, func(c carapace.Context) carapace.Action { + switch len(c.Parts) { + case 0: + return carapace.ActionValues("true", "false").Suffix(":") + default: + return carapace.Batch( + carapace.ActionValues( + "yes", + "positive", + ).Unless(c.Parts[0] != "true"), + carapace.ActionValues( + "no", + "negative", + ).Unless(c.Parts[0] != "false"), + ).ToA() + } +}) ``` ![](./unless.cast) [`Unless`]:https://pkg.go.dev/github.com/carapace-sh/carapace#Action.Unless -[condition]:https://pkg.go.dev/github.com/carapace-sh/carapace/pkg/condition diff --git a/docs/src/carapace/action/unlessF.cast b/docs/src/carapace/action/unlessF.cast new file mode 100644 index 000000000..26675a6c5 --- /dev/null +++ b/docs/src/carapace/action/unlessF.cast @@ -0,0 +1,59 @@ +{"version": 2, "width": 80, "height": 12, "timestamp": 1726929444, "env": {"SHELL": "elvish", "TERM": "tmux-256color"}} +[0.2044, "o", "\u001b[?7h\u001b[7m⏎\u001b[m \r \r\u001b[?7l\u001b[?2004h"] +[0.20511, "o", "\u001b[?25l\r???> ???> \r\u001b[5C\u001b[?25h\u001b[?25l\r\u001b[5C\u001b[K\r\u001b[5C\u001b[?25h"] +[0.223458, "o", "\u001b[?25l\r\r\u001b[5C\u001b[?25h\u001b[?25l\r\r\u001b[5C\u001b[?25h"] +[0.22353, "o", "\u001b[?25l\r\u001b[K\u001b[0;1;36m~\u001b[0;m \r\n\u001b[0;1;37mesh\u001b[0;m \u001b[0;1;32m❯\u001b[0;m \r\u001b[6C\u001b[?25h"] +[0.602139, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[6C\u001b[0;31me\u001b[0;m\r\u001b[7C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[7C\u001b[?25h"] +[0.602641, "o", "\u001b[?25l\u001b[1A\r\r\n\r\u001b[7C\u001b[?25h"] +[0.615016, "o", "\u001b[?25l\u001b[1A\r\r\n\r\u001b[7C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[7C\u001b[?25h"] +[0.615168, "o", "\u001b[?25l\u001b[1A\r\r\n\r\u001b[7C\u001b[?25h"] +[1.100985, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[7C\u001b[0;31mx\u001b[0;m\r\u001b[8C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[8C\u001b[?25h"] +[1.218184, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[6C\u001b[K\u001b[0;32mexa\u001b[0;m\r\u001b[9C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[9C\u001b[?25h"] +[1.33266, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[6C\u001b[K\u001b[0;31mexam\u001b[0;m\r\u001b[10C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[10C\u001b[?25h"] +[1.397167, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[10C\u001b[0;31mp\u001b[0;m\r\u001b[11C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[11C\u001b[?25h"] +[1.514046, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[11C\u001b[0;31ml\u001b[0;m\r\u001b[12C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[12C\u001b[?25h"] +[1.628261, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[6C\u001b[K\u001b[0;32mexample\u001b[0;m\r\u001b[13C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[13C\u001b[?25h"] +[1.729894, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[13C \r\u001b[14C\u001b[?25h"] +[1.730018, "o", "\u001b[?25l\u001b[1A\r\r\n\r\u001b[14C\u001b[?25h"] +[2.24433, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[14Cm\r\u001b[15C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[15C\u001b[?25h"] +[2.301778, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[15Co\r\u001b[16C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[16C\u001b[?25h"] +[2.428727, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[16Cdifier \r\u001b[23C\u001b[?25h"] +[2.837409, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[23C-\r\u001b[24C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[24C\u001b[?25h"] +[2.981529, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[24C-\r\u001b[25C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[25C\u001b[?25h"] +[3.569226, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[23C\u001b[K\u001b[0;4m--batch \r\n\u001b[0;1;37;45m COMPLETING argument \u001b[0;m \r\n\u001b[0;7;34m--batch\u001b[0;2;7m (Batch()) \u001b[0;m --help\u001b[0;2m (help for modifier) \r\n\u001b[0;34m--cache\u001b[0;2m (Cache()) \u001b[0;m \u001b[0;34m--invoke\u001b[0;2m (Invoke()) \r\n\u001b[0;34m--cache-key\u001b[0;2m (Cache()) \u001b[0;m \u001b[0;34m--list\u001b[0;2m (List()) \r\n\u001b[0;34m--chdir\u001b[0;2m (Chdir()) \u001b[0;m \u001b[0;34m--multiparts\u001b[0;2m (MultiParts()) \r\n\u001b[0;34m--chdirf\u001b[0;2m (ChdirF()) \u001b[0;m \u001b[0;34m--multipartsp\u001b[0;2m (MultiPartsP()) \r\n\u001b[0;34m--filter\u001b[0;2m (Filter()) \u001b[0;m \u001b[0;34m--nospace\u001b[0;2m (NoSpace()) \r\n\u001b[0;34m--filterargs\u001b[0;2m (FilterArgs()) \u001b[0;m \u001b[0;33m--persistentFlag\u001b[0;2m (Help message for persistentFlag\r\n\u001b[0;34m--filterparts\u001b[0;2m (FilterParts())\u001b[0;m \u001b[0;34m--persistentFlag2\u001b[0;2m (Help message for persistentFla\r\n\u001b[0;7;35m \u001b[0;35m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0;m\u001b[9A\r\u001b[22C\u001b[?25h"] +[3.632282, "o", "\u001b[?25l\u001b[2A\r\r\n\u001b[25C\u001b[K\u001b[0;4mmultiparts \r\n\u001b[22C\u001b[0;mu\r\n\u001b[2C\u001b[K\u001b[0;7;34mmultiparts\u001b[0;2;7m (MultiParts()) \u001b[0;m \u001b[0;34m--uniquelist\u001b[0;2m (UniqueList()) \r\n\u001b[2C\u001b[0;m\u001b[K\u001b[0;34mmultipartsp\u001b[0;2m (MultiPartsP())\u001b[0;m \u001b[0;34m--uniquelistf\u001b[0;2m (UniqueListF())\r\n\u001b[2C\u001b[0;m\u001b[K\u001b[0;34msuffix\u001b[0;2m (Suffix()) \u001b[0;m \u001b[0;34m--unless\u001b[0;2m (Unless()) \r\n\u001b[2C\u001b[0;m\u001b[K\u001b[0;34msuppress\u001b[0;2m (Suppress()) \u001b[0;m \u001b[0;34m--unlessf\u001b[0;2m (UnlessF()) \r\n\u001b[2C\u001b[0;m\u001b[K\u001b[0;34mtimeout\u001b[0;2m (Timeout()) \u001b[0;m \u001b[0;34m--usage\u001b[0;2m (Usage()) \u001b[0;m\r\n\u001b[J\u001b[A\u001b[5A\r\u001b[23C\u001b[?25h"] +[4.33225, "o", "\u001b[?25l\u001b[2A\r\r\n\u001b[25C\u001b[K\u001b[0;4muniquelist \r\n\u001b[23C\u001b[0;mn\r\n\u001b[2C\u001b[K\u001b[0;7;34muniquelist\u001b[0;2;7m (UniqueList()) \u001b[0;m \u001b[0;34m--unless\u001b[0;2m (Unless()) \r\n\u001b[2C\u001b[0;m\u001b[K\u001b[0;34muniquelistf\u001b[0;2m (UniqueListF())\u001b[0;m \u001b[0;34m--unlessf\u001b[0;2m (UnlessF())\u001b[0;m\r\n\u001b[J\u001b[A\u001b[2A\r\u001b[24C\u001b[?25h"] +[4.33239, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\n\r\n\u001b[2A\r\u001b[24C\u001b[?25h"] +[4.466069, "o", "\u001b[?25l\u001b[2A\r\r\n\u001b[27C\u001b[K\u001b[0;4mless \r\n\u001b[24C\u001b[0;ml\r\n\u001b[4C\u001b[K\u001b[0;7;34mless\u001b[0;2;7m (Unless())\u001b[0;m \u001b[0;34m--unlessf\u001b[0;2m (UnlessF())\u001b[0;m\r\n\u001b[J\u001b[A\u001b[1A\r\u001b[25C\u001b[?25h"] +[4.466185, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\n\u001b[1A\r\u001b[25C\u001b[?25h"] +[5.108758, "o", "\u001b[?25l\u001b[2A\r\r\n\u001b[31C\u001b[K\u001b[0;4mf \r\n\r\n\u001b[0;m\u001b[K\u001b[0;34m--unless\u001b[0;2m (Unless())\u001b[0;m \u001b[0;7;34m--unlessf\u001b[0;2;7m (UnlessF())\u001b[0;m\u001b[1A\r\u001b[25C\u001b[?25h"] +[5.530079, "o", "\u001b[?25l\u001b[2A\r\r\n\u001b[23C\u001b[K--unlessf \r\n\u001b[J\u001b[A\r\u001b[33C\u001b[?25h"] +[5.530333, "o", "\u001b[?25l\u001b[1A\r\r\n\r\u001b[33C\u001b[?25h"] +[5.948117, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[33C\u001b[0;4m./local \r\n\u001b[0;1;37;45m COMPLETING argument \u001b[0;m \r\n\u001b[0;7m./local\u001b[0;m /abs one three two ~/home\u001b[1A\r\u001b[22C\u001b[?25h"] +[5.948485, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\n\u001b[1A\r\u001b[22C\u001b[?25h"] +[5.948949, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\n\u001b[1A\r\u001b[22C\u001b[?25h"] +[5.949151, "o", "\u001b[?25l\u001b[2A\r\r\n\r\n\r\n\u001b[1A\r\u001b[22C\u001b[?25h"] +[7.585602, "o", "\u001b[?25l\u001b[2A\r\r\n\u001b[33C\u001b[K\r\n\u001b[J\u001b[A\r\u001b[33C\u001b[?25h"] +[8.093878, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[33C/\r\u001b[34C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[34C\u001b[?25h"] +[8.279985, "o", "\u001b[?25l\u001b[1A\r\u001b[0;2musage: \u001b[0;mUnlessF()\u001b[K\r\n\u001b[0;31merror:\u001b[0;m no candidates\u001b[K\r\n\u001b[K\u001b[0;1;36m~\u001b[0;m \r\n\u001b[0;1;37mesh\u001b[0;m \u001b[0;1;32m❯\u001b[0;m \u001b[0;32mexample\u001b[0;m modifier --unlessf /\r\u001b[34C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[34C\u001b[?25h"] +[8.938739, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[33C\u001b[K\r\u001b[33C\u001b[?25h"] +[9.277511, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[33C~\r\u001b[34C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[34C\u001b[?25h"] +[9.596644, "o", "\u001b[?25l\u001b[1A\r\u001b[0;2musage: \u001b[0;mUnlessF()\u001b[K\r\n\u001b[0;31merror:\u001b[0;m no candidates\u001b[K\r\n\u001b[K\u001b[0;1;36m~\u001b[0;m \r\n\u001b[0;1;37mesh\u001b[0;m \u001b[0;1;32m❯\u001b[0;m \u001b[0;32mexample\u001b[0;m modifier --unlessf ~\r\u001b[34C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[34C\u001b[?25h"] +[10.345352, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[33C\u001b[K\r\u001b[33C\u001b[?25h"] +[10.58072, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[33C.\r\u001b[34C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[34C\u001b[?25h"] +[10.648674, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[34C/\r\u001b[35C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[35C\u001b[?25h"] +[10.777515, "o", "\u001b[?25l\u001b[1A\r\u001b[0;2musage: \u001b[0;mUnlessF()\u001b[K\r\n\u001b[0;31merror:\u001b[0;m no candidates\u001b[K\r\n\u001b[K\u001b[0;1;36m~\u001b[0;m \r\n\u001b[0;1;37mesh\u001b[0;m \u001b[0;1;32m❯\u001b[0;m \u001b[0;32mexample\u001b[0;m modifier --unlessf ./\r\u001b[35C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[35C\u001b[?25h"] +[11.741015, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[34C\u001b[K\r\u001b[34C\u001b[?25h"] +[12.268904, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[33C\u001b[K\r\u001b[33C\u001b[?25h"] +[12.359171, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[33Ct\r\u001b[34C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[34C\u001b[?25h"] +[12.522386, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[33C\u001b[K\u001b[0;4mthree \r\n\u001b[0;1;37;45m COMPLETING argument \u001b[0;m \r\n\u001b[0;7mthree\u001b[0;m two\u001b[1A\r\u001b[22C\u001b[?25h"] +[13.289741, "o", "\u001b[?25l\u001b[2A\r\r\n\u001b[34C\u001b[K\u001b[0;4mwo \r\n\r\n\u001b[0;m\u001b[Kthree \u001b[0;7mtwo\u001b[0;m\u001b[1A\r\u001b[22C\u001b[?25h"] +[13.78906, "o", "\u001b[?25l\u001b[2A\r\r\n\u001b[33C\u001b[Ktwo \r\n\u001b[J\u001b[A\r\u001b[37C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[37C\u001b[?25h"] +[15.213421, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[6C\u001b[K\r\u001b[6C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[6C\u001b[?25h"] +[15.215373, "o", "\u001b[?25l\u001b[1A\r\r\n\r\u001b[6C\u001b[?25h"] +[15.246035, "o", "\u001b[?25l\u001b[1A\r\r\n\r\u001b[6C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[6C\u001b[?25h"] +[15.644121, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[6C\u001b[0;31me\u001b[0;m\r\u001b[7C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[7C\u001b[?25h"] +[15.85989, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[7C\u001b[0;31mx\u001b[0;m\r\u001b[8C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[8C\u001b[?25h"] +[16.050456, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[8C\u001b[0;31mi\u001b[0;m\r\u001b[9C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[9C\u001b[?25h"] +[16.115359, "o", "\u001b[?25l\u001b[1A\r\r\n\u001b[6C\u001b[K\u001b[0;32mexit\u001b[0;m\r\u001b[10C\u001b[?25h\u001b[?25l\u001b[1A\r\r\n\r\u001b[10C\u001b[?25h"] +[16.339424, "o", "\u001b[?25l\u001b[1A\r\r\n\r\n\r\u001b[?25h\u001b[?7h\u001b[?2004l\r"] diff --git a/docs/src/carapace/action/unlessF.md b/docs/src/carapace/action/unlessF.md new file mode 100644 index 000000000..7042b61ee --- /dev/null +++ b/docs/src/carapace/action/unlessF.md @@ -0,0 +1,19 @@ +# UnlessF + +[`UnlessF`] skips invokation if given [condition] returns `true`. + +```go +carapace.ActionValues( + "./local", + "~/home", + "/abs", + "one", + "two", + "three", +).UnlessF(condition.CompletingPath) +``` + +![](./unlessF.cast) + +[`UnlessF`]:https://pkg.go.dev/github.com/carapace-sh/carapace#Action.UnlessF +[condition]:https://pkg.go.dev/github.com/carapace-sh/carapace/pkg/condition diff --git a/example/cmd/modifier.go b/example/cmd/modifier.go index d51494715..ecaaf631c 100644 --- a/example/cmd/modifier.go +++ b/example/cmd/modifier.go @@ -52,6 +52,7 @@ func init() { modifierCmd.Flags().String("uniquelist", "", "UniqueList()") modifierCmd.Flags().String("uniquelistf", "", "UniqueListF()") modifierCmd.Flags().String("unless", "", "Unless()") + modifierCmd.Flags().String("unlessf", "", "UnlessF()") modifierCmd.Flags().String("usage", "", "Usage()") rootCmd.AddCommand(modifierCmd) @@ -266,14 +267,31 @@ func init() { }).UniqueListF(",", func(s string) string { return strings.SplitN(s, ":", 2)[0] }), - "unless": carapace.ActionValues( + "unless": carapace.ActionMultiPartsN(":", 2, func(c carapace.Context) carapace.Action { + switch len(c.Parts) { + case 0: + return carapace.ActionValues("true", "false").Suffix(":") + default: + return carapace.Batch( + carapace.ActionValues( + "yes", + "positive", + ).Unless(c.Parts[0] != "true"), + carapace.ActionValues( + "no", + "negative", + ).Unless(c.Parts[0] != "false"), + ).ToA() + } + }), + "unlessf": carapace.ActionValues( "./local", "~/home", "/abs", "one", "two", "three", - ).Unless(condition.CompletingPath), + ).UnlessF(condition.CompletingPath), "usage": carapace.ActionValues().Usage("explicit usage"), }) diff --git a/example/cmd/modifier_test.go b/example/cmd/modifier_test.go index 97d35c389..052d251ad 100644 --- a/example/cmd/modifier_test.go +++ b/example/cmd/modifier_test.go @@ -463,9 +463,30 @@ func TestSplitP(t *testing.T) { Usage("SplitP()")) }) } + func TestUnless(t *testing.T) { sandbox.Package(t, "github.com/carapace-sh/carapace/example")(func(s *sandbox.Sandbox) { - s.Run("modifier", "--unless", ""). + s.Run("modifier", "--unless", "true:"). + Expect(carapace.ActionValues( + "yes", + "positive", + ).Prefix("true:"). + NoSpace(':'). + Usage("Unless()")) + + s.Run("modifier", "--unless", "false:"). + Expect(carapace.ActionValues( + "no", + "negative", + ).Prefix("false:"). + NoSpace(':'). + Usage("Unless()")) + }) +} + +func TestUnlessF(t *testing.T) { + sandbox.Package(t, "github.com/carapace-sh/carapace/example")(func(s *sandbox.Sandbox) { + s.Run("modifier", "--unlessf", ""). Expect(carapace.ActionValues( "./local", "~/home", @@ -473,22 +494,22 @@ func TestUnless(t *testing.T) { "one", "two", "three", - ).Usage("Unless()")) + ).Usage("UnlessF()")) - s.Run("modifier", "--unless", "t"). + s.Run("modifier", "--unlessf", "t"). Expect(carapace.ActionValues( "two", "three", - ).Usage("Unless()")) + ).Usage("UnlessF()")) - s.Run("modifier", "--unless", "."). - Expect(carapace.ActionValues().Usage("Unless()")) + s.Run("modifier", "--unlessf", "."). + Expect(carapace.ActionValues().Usage("UnlessF()")) - s.Run("modifier", "--unless", "~"). - Expect(carapace.ActionValues().Usage("Unless()")) + s.Run("modifier", "--unlessf", "~"). + Expect(carapace.ActionValues().Usage("UnlessF()")) - s.Run("modifier", "--unless", "/"). - Expect(carapace.ActionValues().Usage("Unless()")) + s.Run("modifier", "--unlessf", "/"). + Expect(carapace.ActionValues().Usage("UnlessF()")) }) }