From 68fe26a5e43060b8d7c3ee7e4793f8658696d909 Mon Sep 17 00:00:00 2001 From: "Brian M. Jemilo II" Date: Mon, 9 Apr 2018 14:54:28 -0500 Subject: [PATCH] [Fix] Add autocompletion support to zsh Fixes #1707. --- bash_completion | 1 + install.sh | 3 +++ test/install_script/nvm_detect_profile | 18 ++++++++++-------- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/bash_completion b/bash_completion index 47eda3e..43df83b 100644 --- a/bash_completion +++ b/bash_completion @@ -92,6 +92,7 @@ __nvm () # ZSH, load and run bashcompinit before calling the complete function. if [[ -n ${ZSH_VERSION-} ]]; then autoload -U +X bashcompinit && bashcompinit + autoload -U +X compinit && compinit fi complete -o default -F __nvm nvm diff --git a/install.sh b/install.sh index 22b4244..db12c38 100755 --- a/install.sh +++ b/install.sh @@ -330,6 +330,8 @@ nvm_do_install() { PROFILE_INSTALL_DIR="$(nvm_install_dir | command sed "s:^$HOME:\$HOME:")" SOURCE_STR="\\nexport NVM_DIR=\"${PROFILE_INSTALL_DIR}\"\\n[ -s \"\$NVM_DIR/nvm.sh\" ] && \\. \"\$NVM_DIR/nvm.sh\" # This loads nvm\\n" + ZSH_COMPLETION_STR='# Load compinit/compdef\n autoload -U compinit\n compinit' + # shellcheck disable=SC2016 COMPLETION_STR='[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion\n' BASH_OR_ZSH=false @@ -358,6 +360,7 @@ nvm_do_install() { # shellcheck disable=SC2016 if ${BASH_OR_ZSH} && ! command grep -qc '$NVM_DIR/bash_completion' "$NVM_PROFILE"; then echo "=> Appending bash_completion source string to $NVM_PROFILE" + command printf "$ZSH_COMPLETION_STR" >> "$NVM_PROFILE" command printf "$COMPLETION_STR" >> "$NVM_PROFILE" else echo "=> bash_completion source string already in ${NVM_PROFILE}" diff --git a/test/install_script/nvm_detect_profile b/test/install_script/nvm_detect_profile index ba5a6ea..1044659 100755 --- a/test/install_script/nvm_detect_profile +++ b/test/install_script/nvm_detect_profile @@ -14,6 +14,8 @@ cleanup () { unset HOME unset NVM_ENV unset NVM_DETECT_PROFILE + unset BASH_VERSION + unset ZSH_VERSION unset -f setup cleanup die rm -f ".bashrc" ".bash_profile" ".zshrc" ".profile" "test_profile" > "/dev/null" 2>&1 } @@ -27,7 +29,7 @@ setup # # .bashrc should be detected for bash -NVM_DETECT_PROFILE="$(SHELL="/bin/bash"; unset PROFILE; nvm_detect_profile)" +NVM_DETECT_PROFILE="$(BASH_VERSION="1"; unset PROFILE; nvm_detect_profile)" if [ "$NVM_DETECT_PROFILE" != "$HOME/.bashrc" ]; then die "nvm_detect_profile didn't pick \$HOME/.bashrc for bash" fi @@ -39,7 +41,7 @@ if [ "$NVM_DETECT_PROFILE" != "test_profile" ]; then fi # .zshrc should be detected for zsh -NVM_DETECT_PROFILE="$(SHELL="/usr/bin/zsh"; unset PROFILE; nvm_detect_profile)" +NVM_DETECT_PROFILE="$(ZSH_VERSION="1"; unset PROFILE; unset BASH_VERSION; nvm_detect_profile)" if [ "$NVM_DETECT_PROFILE" != "$HOME/.zshrc" ]; then die "nvm_detect_profile didn't pick \$HOME/.zshrc for zsh" fi @@ -56,7 +58,7 @@ fi # # $PROFILE is a valid file -NVM_DETECT_PROFILE="$(PROFILE="test_profile"; nvm_detect_profile)" +NVM_DETECT_PROFILE="$(PROFILE="test_profile"; unset ZSH_VERSION; nvm_detect_profile)" if [ "$NVM_DETECT_PROFILE" != "test_profile" ]; then die "nvm_detect_profile didn't pick \$PROFILE when it was a valid file" fi @@ -75,35 +77,35 @@ fi # # It should favor .profile if file exists -NVM_DETECT_PROFILE="$(unset SHELL; nvm_detect_profile)" +NVM_DETECT_PROFILE="$(unset BASH_VERSION; unset ZSH_VERSION; nvm_detect_profile)" if [ "$NVM_DETECT_PROFILE" != "$HOME/.profile" ]; then die "nvm_detect_profile should have selected .profile" fi # Otherwise, it should favor .bashrc if file exists rm ".profile" -NVM_DETECT_PROFILE="$(unset SHELL; nvm_detect_profile)" +NVM_DETECT_PROFILE="$(unset BASH_VERSION; unset ZSH_VERSION; nvm_detect_profile)" if [ "$NVM_DETECT_PROFILE" != "$HOME/.bashrc" ]; then die "nvm_detect_profile should have selected .bashrc" fi # Otherwise, it should favor .bash_profile if file exists rm ".bashrc" -NVM_DETECT_PROFILE="$(unset SHELL; nvm_detect_profile)" +NVM_DETECT_PROFILE="$(unset BASH_VERSION; unset ZSH_VERSION; nvm_detect_profile)" if [ "$NVM_DETECT_PROFILE" != "$HOME/.bash_profile" ]; then die "nvm_detect_profile should have selected .bash_profile" fi # Otherwise, it should favor .zshrc if file exists rm ".bash_profile" -NVM_DETECT_PROFILE="$(unset SHELL; nvm_detect_profile)" +NVM_DETECT_PROFILE="$(unset BASH_VERSION; unset ZSH_VERSION; nvm_detect_profile)" if [ "$NVM_DETECT_PROFILE" != "$HOME/.zshrc" ]; then die "nvm_detect_profile should have selected .zshrc" fi # It should be empty if none is found rm ".zshrc" -NVM_DETECT_PROFILE="$(unset SHELL; nvm_detect_profile)" +NVM_DETECT_PROFILE="$(unset BASH_VERSION; unset ZSH_VERSION; nvm_detect_profile)" if [ ! -z "$NVM_DETECT_PROFILE" ]; then die "nvm_detect_profile should have returned an empty value" fi