| #!/usr/bin/env bash | |
| # bash completion for Node Version Manager (NVM) | |
| if ! command -v nvm &> /dev/null; then | |
| return | |
| fi | |
| __nvm_generate_completion() { | |
| declare current_word | |
| current_word="${COMP_WORDS[COMP_CWORD]}" | |
| # shellcheck disable=SC2207 | |
| COMPREPLY=($(compgen -W "$1" -- "${current_word}")) | |
| return 0 | |
| } | |
| __nvm_commands() { | |
| declare current_word | |
| declare command | |
| current_word="${COMP_WORDS[COMP_CWORD]}" | |
| COMMANDS=' | |
| help install uninstall use run exec | |
| alias unalias reinstall-packages | |
| current list ls list-remote ls-remote | |
| install-latest-npm | |
| cache deactivate unload | |
| version version-remote which' | |
| if [ ${#COMP_WORDS[@]} == 4 ]; then | |
| command="${COMP_WORDS[COMP_CWORD - 2]}" | |
| case "${command}" in | |
| alias) __nvm_installed_nodes ;; | |
| esac | |
| else | |
| case "${current_word}" in | |
| -*) __nvm_options ;; | |
| *) __nvm_generate_completion "${COMMANDS}" ;; | |
| esac | |
| fi | |
| } | |
| __nvm_options() { | |
| OPTIONS='' | |
| __nvm_generate_completion "${OPTIONS}" | |
| } | |
| __nvm_installed_nodes() { | |
| __nvm_generate_completion "$(nvm_ls) $(__nvm_aliases)" | |
| } | |
| __nvm_aliases() { | |
| declare aliases | |
| aliases="" | |
| if [ -d "${NVM_DIR}/alias" ]; then | |
| aliases="$(cd "${NVM_DIR}/alias" && command find "${PWD}" -type f | command sed "s:${PWD}/::")" | |
| fi | |
| echo "${aliases} node stable unstable iojs" | |
| } | |
| __nvm_alias() { | |
| __nvm_generate_completion "$(__nvm_aliases)" | |
| } | |
| __nvm() { | |
| declare previous_word | |
| previous_word="${COMP_WORDS[COMP_CWORD - 1]}" | |
| case "${previous_word}" in | |
| use | run | exec | ls | list | uninstall) __nvm_installed_nodes ;; | |
| alias | unalias) __nvm_alias ;; | |
| *) __nvm_commands ;; | |
| esac | |
| return 0 | |
| } | |
| # complete is a bash builtin, but recent versions of ZSH come with a function | |
| # called bashcompinit that will create a complete in ZSH. If the user is in | |
| # ZSH, load and run bashcompinit before calling the complete function. | |
| if [[ -n ${ZSH_VERSION-} ]]; then | |
| # First calling compinit (only if not called yet!) | |
| # and then bashcompinit as mentioned by zsh man page. | |
| if ! command -v compinit > /dev/null; then | |
| autoload -U +X compinit && if [[ ${ZSH_DISABLE_COMPFIX-} = true ]]; then | |
| compinit -u | |
| else | |
| compinit | |
| fi | |
| fi | |
| autoload -U +X bashcompinit && bashcompinit | |
| fi | |
| complete -o default -F __nvm nvm |