|
@@ -37,7 +37,13 @@ function _omz {
|
|
|
changelog) local -a refs
|
|
|
refs=("${(@f)$(command git for-each-ref --format="%(refname:short):%(subject)" refs/heads refs/tags)}")
|
|
|
_describe 'command' refs ;;
|
|
|
- plugin) subcmds=('info:Get plugin information' 'list:List plugins' 'load:Load plugin(s)')
|
|
|
+ plugin) subcmds=(
|
|
|
+ 'disable:Disable plugin(s)'
|
|
|
+ 'enable:Enable plugin(s)'
|
|
|
+ 'info:Get plugin information'
|
|
|
+ 'list:List plugins'
|
|
|
+ 'load:Load plugin(s)'
|
|
|
+ )
|
|
|
_describe 'command' subcmds ;;
|
|
|
pr) subcmds=('test:Test a Pull Request' 'clean:Delete all Pull Request branches')
|
|
|
_describe 'command' subcmds ;;
|
|
@@ -45,8 +51,21 @@ function _omz {
|
|
|
_describe 'command' subcmds ;;
|
|
|
esac
|
|
|
elif (( CURRENT == 4 )); then
|
|
|
- case "$words[2]::$words[3]" in
|
|
|
- plugin::(info|load))
|
|
|
+ case "${words[2]}::${words[3]}" in
|
|
|
+ plugin::(disable|enable|load))
|
|
|
+ local -aU valid_plugins
|
|
|
+
|
|
|
+ if [[ "${words[3]}" = disable ]]; then
|
|
|
+ # if command is "disable", only offer already enabled plugins
|
|
|
+ valid_plugins=($plugins)
|
|
|
+ else
|
|
|
+ valid_plugins=("$ZSH"/plugins/*/{_*,*.plugin.zsh}(.N:h:t) "$ZSH_CUSTOM"/plugins/*/{_*,*.plugin.zsh}(.N:h:t))
|
|
|
+ # if command is "enable", remove already enabled plugins
|
|
|
+ [[ "${words[3]}" = enable ]] && valid_plugins=(${valid_plugins:|plugins})
|
|
|
+ fi
|
|
|
+
|
|
|
+ _describe 'plugin' valid_plugins ;;
|
|
|
+ plugin::info)
|
|
|
local -aU plugins=("$ZSH"/plugins/*/{_*,*.plugin.zsh}(.N:h:t) "$ZSH_CUSTOM"/plugins/*/{_*,*.plugin.zsh}(.N:h:t))
|
|
|
_describe 'plugin' plugins ;;
|
|
|
theme::use)
|
|
@@ -54,18 +73,27 @@ function _omz {
|
|
|
_describe 'theme' themes ;;
|
|
|
esac
|
|
|
elif (( CURRENT > 4 )); then
|
|
|
- case "$words[2]::$words[3]" in
|
|
|
- plugin::load)
|
|
|
- local -aU plugins=("$ZSH"/plugins/*/{_*,*.plugin.zsh}(.N:h:t) "$ZSH_CUSTOM"/plugins/*/{_*,*.plugin.zsh}(.N:h:t))
|
|
|
+ case "${words[2]}::${words[3]}" in
|
|
|
+ plugin::(enable|disable|load))
|
|
|
+ local -aU valid_plugins
|
|
|
+
|
|
|
+ if [[ "${words[3]}" = disable ]]; then
|
|
|
+ # if command is "disable", only offer already enabled plugins
|
|
|
+ valid_plugins=($plugins)
|
|
|
+ else
|
|
|
+ valid_plugins=("$ZSH"/plugins/*/{_*,*.plugin.zsh}(.N:h:t) "$ZSH_CUSTOM"/plugins/*/{_*,*.plugin.zsh}(.N:h:t))
|
|
|
+ # if command is "enable", remove already enabled plugins
|
|
|
+ [[ "${words[3]}" = enable ]] && valid_plugins=(${valid_plugins:|plugins})
|
|
|
+ fi
|
|
|
|
|
|
# Remove plugins already passed as arguments
|
|
|
# NOTE: $(( CURRENT - 1 )) is the last plugin argument completely passed, i.e. that which
|
|
|
# has a space after them. This is to avoid removing plugins partially passed, which makes
|
|
|
# the completion not add a space after the completed plugin.
|
|
|
local -a args=(${words[4,$(( CURRENT - 1))]})
|
|
|
- plugins=(${plugins:|args})
|
|
|
+ valid_plugins=(${valid_plugins:|args})
|
|
|
|
|
|
- _describe 'plugin' plugins ;;
|
|
|
+ _describe 'plugin' valid_plugins ;;
|
|
|
esac
|
|
|
fi
|
|
|
|
|
@@ -161,9 +189,11 @@ Usage: omz plugin <command> [options]
|
|
|
|
|
|
Available commands:
|
|
|
|
|
|
- info <plugin> Get information of a plugin
|
|
|
- list List all available Oh My Zsh plugins
|
|
|
- load <plugin> Load plugin(s)
|
|
|
+ disable <plugin> Disable plugin(s)
|
|
|
+ enable <plugin> Enable plugin(s)
|
|
|
+ info <plugin> Get information of a plugin
|
|
|
+ list List all available Oh My Zsh plugins
|
|
|
+ load <plugin> Load plugin(s)
|
|
|
|
|
|
EOF
|
|
|
return 1
|
|
@@ -175,6 +205,172 @@ EOF
|
|
|
_omz::plugin::$command "$@"
|
|
|
}
|
|
|
|
|
|
+function _omz::plugin::disable {
|
|
|
+ if [[ -z "$1" ]]; then
|
|
|
+ echo >&2 "Usage: omz plugin disable <plugin> [...]"
|
|
|
+ return 1
|
|
|
+ fi
|
|
|
+
|
|
|
+ # Check that plugin is in $plugins
|
|
|
+ local -a dis_plugins=()
|
|
|
+ for plugin in "$@"; do
|
|
|
+ if [[ ${plugins[(Ie)$plugin]} -eq 0 ]]; then
|
|
|
+ _omz::log warn "plugin '$plugin' is not enabled."
|
|
|
+ continue
|
|
|
+ fi
|
|
|
+ dis_plugins+=("$plugin")
|
|
|
+ done
|
|
|
+
|
|
|
+ # Exit if there are no enabled plugins to disable
|
|
|
+ if [[ ${#dis_plugins} -eq 0 ]]; then
|
|
|
+ return 1
|
|
|
+ fi
|
|
|
+
|
|
|
+ # Disable plugins awk script
|
|
|
+ local awk_script="
|
|
|
+# if plugins=() is in oneline form, substitute disabled plugins and go to next line
|
|
|
+/^\s*plugins=\([^#]+\).*\$/ {
|
|
|
+ sub(/\s+(${(j:|:)dis_plugins})/, \"\") # with spaces before
|
|
|
+ sub(/(${(j:|:)dis_plugins})\s+/, \"\") # with spaces after
|
|
|
+ sub(/\((${(j:|:)dis_plugins})\)/, \"\") # without spaces (only plugin)
|
|
|
+ print \$0
|
|
|
+ next
|
|
|
+}
|
|
|
+
|
|
|
+# if plugins=() is in multiline form, enable multi flag and disable plugins if they're there
|
|
|
+/^\s*plugins=\(/ {
|
|
|
+ multi=1
|
|
|
+ sub(/\s+(${(j:|:)dis_plugins})/, \"\")
|
|
|
+ sub(/(${(j:|:)dis_plugins})\s+/, \"\")
|
|
|
+ sub(/\((${(j:|:)dis_plugins})\)/, \"\")
|
|
|
+ print \$0
|
|
|
+ next
|
|
|
+}
|
|
|
+
|
|
|
+# if multi flag is enabled and we find a valid closing parenthesis,
|
|
|
+# add new plugins and disable multi flag
|
|
|
+multi == 1 && /^[^#]*\)/ {
|
|
|
+ multi=0
|
|
|
+ sub(/\s+(${(j:|:)dis_plugins})/, \"\")
|
|
|
+ sub(/(${(j:|:)dis_plugins})\s+/, \"\")
|
|
|
+ sub(/\((${(j:|:)dis_plugins})\)/, \"\")
|
|
|
+ print \$0
|
|
|
+ next
|
|
|
+}
|
|
|
+
|
|
|
+multi == 1 {
|
|
|
+ sub(/\s+(${(j:|:)dis_plugins})/, \"\")
|
|
|
+ sub(/(${(j:|:)dis_plugins})\s+/, \"\")
|
|
|
+ sub(/\((${(j:|:)dis_plugins})\)/, \"\")
|
|
|
+ print \$0
|
|
|
+ next
|
|
|
+}
|
|
|
+
|
|
|
+{ print \$0 }
|
|
|
+"
|
|
|
+
|
|
|
+ awk "$awk_script" ~/.zshrc > ~/.zshrc.disabled \
|
|
|
+ && mv ~/.zshrc ~/.zshrc.swp \
|
|
|
+ && mv ~/.zshrc.disabled ~/.zshrc
|
|
|
+
|
|
|
+ # Exit if the new .zshrc file wasn't created correctly
|
|
|
+ [[ $? -eq 0 ]] || {
|
|
|
+ local ret=$?
|
|
|
+ _omz::log error "error disabling plugins."
|
|
|
+ return $ret
|
|
|
+ }
|
|
|
+
|
|
|
+ # Exit if the new .zshrc file has syntax errors
|
|
|
+ if ! zsh -n ~/.zshrc; then
|
|
|
+ _omz::log error "broken syntax in ~/.zshrc. Rolling back changes..."
|
|
|
+ mv ~/.zshrc ~/.zshrc.disabled
|
|
|
+ mv ~/.zshrc.swp ~/.zshrc
|
|
|
+ return 1
|
|
|
+ fi
|
|
|
+
|
|
|
+ # Restart the zsh session if there were no errors
|
|
|
+ _omz::log info ""
|
|
|
+
|
|
|
+ # Old zsh versions don't have ZSH_ARGZERO
|
|
|
+ local zsh="${ZSH_ARGZERO:-${functrace[-1]%:*}}"
|
|
|
+ # Check whether to run a login shell
|
|
|
+ [[ "$zsh" = -* || -o login ]] && exec -l "${zsh#-}" || exec "$zsh"
|
|
|
+}
|
|
|
+
|
|
|
+function _omz::plugin::enable {
|
|
|
+ if [[ -z "$1" ]]; then
|
|
|
+ echo >&2 "Usage: omz plugin enable <plugin> [...]"
|
|
|
+ return 1
|
|
|
+ fi
|
|
|
+
|
|
|
+ # Check that plugin is not in $plugins
|
|
|
+ local -a add_plugins=()
|
|
|
+ for plugin in "$@"; do
|
|
|
+ if [[ ${plugins[(Ie)$plugin]} -ne 0 ]]; then
|
|
|
+ _omz::log warn "plugin '$plugin' is already enabled."
|
|
|
+ continue
|
|
|
+ fi
|
|
|
+ add_plugins+=("$plugin")
|
|
|
+ done
|
|
|
+
|
|
|
+ # Exit if there are no plugins to enable
|
|
|
+ if [[ ${#add_plugins} -eq 0 ]]; then
|
|
|
+ return 1
|
|
|
+ fi
|
|
|
+
|
|
|
+ # Enable plugins awk script
|
|
|
+ local awk_script="
|
|
|
+# if plugins=() is in oneline form, substitute ) with new plugins and go to the next line
|
|
|
+/^\s*plugins=\([^#]+\).*\$/ {
|
|
|
+ sub(/\)/, \" $add_plugins&\")
|
|
|
+ print \$0
|
|
|
+ next
|
|
|
+}
|
|
|
+
|
|
|
+# if plugins=() is in multiline form, enable multi flag
|
|
|
+/^\s*plugins=\(/ {
|
|
|
+ multi=1
|
|
|
+}
|
|
|
+
|
|
|
+# if multi flag is enabled and we find a valid closing parenthesis,
|
|
|
+# add new plugins and disable multi flag
|
|
|
+multi == 1 && /^[^#]*\)/ {
|
|
|
+ multi=0
|
|
|
+ sub(/\)/, \" $add_plugins&\")
|
|
|
+ print \$0
|
|
|
+ next
|
|
|
+}
|
|
|
+
|
|
|
+{ print \$0 }
|
|
|
+"
|
|
|
+
|
|
|
+ awk "$awk_script" ~/.zshrc > ~/.zshrc.disabled \
|
|
|
+ && mv ~/.zshrc ~/.zshrc.swp \
|
|
|
+ && mv ~/.zshrc.disabled ~/.zshrc
|
|
|
+
|
|
|
+ # Exit if the new .zshrc file wasn't created correctly
|
|
|
+ [[ $? -eq 0 ]] || {
|
|
|
+ local ret=$?
|
|
|
+ _omz::log error "error disabling plugins."
|
|
|
+ return $ret
|
|
|
+ }
|
|
|
+
|
|
|
+ # Exit if the new .zshrc file has syntax errors
|
|
|
+ if ! zsh -n ~/.zshrc; then
|
|
|
+ _omz::log error "broken syntax in ~/.zshrc. Rolling back changes..."
|
|
|
+ mv ~/.zshrc ~/.zshrc.disabled
|
|
|
+ mv ~/.zshrc.swp ~/.zshrc
|
|
|
+ return 1
|
|
|
+ fi
|
|
|
+
|
|
|
+ # Restart the zsh session if there were no errors
|
|
|
+
|
|
|
+ # Old zsh versions don't have ZSH_ARGZERO
|
|
|
+ local zsh="${ZSH_ARGZERO:-${functrace[-1]%:*}}"
|
|
|
+ # Check whether to run a login shell
|
|
|
+ [[ "$zsh" = -* || -o login ]] && exec -l "${zsh#-}" || exec "$zsh"
|
|
|
+}
|
|
|
+
|
|
|
function _omz::plugin::info {
|
|
|
if [[ -z "$1" ]]; then
|
|
|
echo >&2 "Usage: omz plugin info <plugin>"
|