summaryrefslogtreecommitdiff
path: root/lib/cli.zsh
diff options
context:
space:
mode:
authorMarc Cornellà <marc@mcornella.com>2024-05-08 22:20:42 +0200
committerGitHub <noreply@github.com>2024-05-08 22:20:42 +0200
commitb0561d28b5a3efbbcca4700626fa32e62c23959b (patch)
tree60b7027b8217d024d5962c205b7fff562e5cd424 /lib/cli.zsh
parent8c5f64cc2f0e75399a1e906e39713ed25b65ece1 (diff)
downloadzsh-b0561d28b5a3efbbcca4700626fa32e62c23959b.tar.gz
zsh-b0561d28b5a3efbbcca4700626fa32e62c23959b.tar.bz2
zsh-b0561d28b5a3efbbcca4700626fa32e62c23959b.zip
fix(cli): fix edge cases in `omz plugin disable` command (#12401)
Also introduces tests, which will be refactored into the proper place when a test system is finally designed. Fixes #12400
Diffstat (limited to 'lib/cli.zsh')
-rw-r--r--lib/cli.zsh14
1 files changed, 11 insertions, 3 deletions
diff --git a/lib/cli.zsh b/lib/cli.zsh
index 4a8d4d127..383b0cfb0 100644
--- a/lib/cli.zsh
+++ b/lib/cli.zsh
@@ -241,10 +241,18 @@ function _omz::plugin::disable {
# Remove plugins substitution awk script
local awk_subst_plugins="\
- gsub(/[ \t]+(${(j:|:)dis_plugins})/, \"\") # with spaces before
- gsub(/(${(j:|:)dis_plugins})[ \t]+/, \"\") # with spaces after
- gsub(/\((${(j:|:)dis_plugins})\)/, \"\") # without spaces (only plugin)
+ gsub(/[ \t]+(${(j:|:)dis_plugins})[ \t]+/, \" \") # with spaces before or after
+ gsub(/[ \t]+(${(j:|:)dis_plugins})$/, \"\") # with spaces before and EOL
+ gsub(/^(${(j:|:)dis_plugins})[ \t]+/, \"\") # with BOL and spaces after
+
+ gsub(/\((${(j:|:)dis_plugins})[ \t]+/, \"(\") # with parenthesis before and spaces after
+ gsub(/[ \t]+(${(j:|:)dis_plugins})\)/, \")\") # with spaces before or parenthesis after
+ gsub(/\((${(j:|:)dis_plugins})\)/, \"()\") # with only parentheses
+
+ gsub(/^(${(j:|:)dis_plugins})\)/, \")\") # with BOL and closing parenthesis
+ gsub(/\((${(j:|:)dis_plugins})$/, \"(\") # with opening parenthesis and EOL
"
+
# Disable plugins awk script
local awk_script="
# if plugins=() is in oneline form, substitute disabled plugins and go to next line