From e1a9d0ce3e142003bf137e8ca3e204474b8c148f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Cornell=C3=A0?= Date: Wed, 2 Feb 2022 23:02:23 +0100 Subject: [PATCH] fix(cli): allow `omz` commands to be used in a script (#10645) The commands `omz plugin {enable,disable}` and `omz theme set` automatically reload the zsh session on success. With this change, the CLI checks whether the commands are run in an interactive session before reloading the zsh session. This change also conditionally sets the completion function for `omz` so that it's not done in a non-interactive session. --- lib/cli.zsh | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/lib/cli.zsh b/lib/cli.zsh index edc10e722..e7f997013 100644 --- a/lib/cli.zsh +++ b/lib/cli.zsh @@ -105,7 +105,10 @@ function _omz { return 0 } -compdef _omz omz +# If run from a script, do not set the completion function +if (( ${+functions[compdef]} )); then + compdef _omz omz +fi ## Utility functions @@ -299,10 +302,8 @@ multi == 1 && length(\$0) > 0 { # Restart the zsh session if there were no errors _omz::log info "plugins disabled: ${(j:, :)dis_plugins}." - # 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" + # Only reload zsh if run in an interactive session + [[ ! -o interactive ]] || _omz::reload } function _omz::plugin::enable { @@ -375,10 +376,8 @@ multi == 1 && /^[^#]*\)/ { # Restart the zsh session if there were no errors _omz::log info "plugins enabled: ${(j:, :)add_plugins}." - # 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" + # Only reload zsh if run in an interactive session + [[ ! -o interactive ]] || _omz::reload } function _omz::plugin::info { @@ -731,10 +730,8 @@ EOF # Restart the zsh session if there were no errors _omz::log info "'$1' theme set correctly." - # 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" + # Only reload zsh if run in an interactive session + [[ ! -o interactive ]] || _omz::reload } function _omz::theme::use {