diff --git a/completions/bash/brew b/completions/bash/brew index 60c272f739..d85a58c4d1 100644 --- a/completions/bash/brew +++ b/completions/bash/brew @@ -539,6 +539,173 @@ _brew_uses() { __brew_complete_formulae } +__brew_caskcomp_words_include () +{ + local i=1 + while [[ $i -lt $COMP_CWORD ]]; do + if [[ "${COMP_WORDS[i]}" = "$1" ]]; then + return 0 + fi + i=$((++i)) + done + return 1 +} + +# Find the previous non-switch word +__brew_caskcomp_prev () +{ + local idx=$((COMP_CWORD - 1)) + local prv="${COMP_WORDS[idx]}" + while [[ $prv == -* ]]; do + idx=$((--idx)) + prv="${COMP_WORDS[idx]}" + done + echo "$prv" +} + +__brew_caskcomp () +{ + # break $1 on space, tab, and newline characters, + # and turn it into a newline separated list of words + local list s sep=$'\n' IFS=$' '$'\t'$'\n' + local cur="${COMP_WORDS[COMP_CWORD]}" + + for s in $1; do + __brew_caskcomp_words_include "$s" && continue + list="$list$s$sep" + done + + IFS=$sep + COMPREPLY=($(compgen -W "$list" -- "$cur")) +} + +# Don't use __brew_caskcomp() in any of the __brew_cask_complete_foo functions, as +# it is too slow and is not worth it just for duplicate elimination. +__brew_cask_complete_formulae () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + local lib=$(brew --repository)/Library + local taps=${lib}/Taps + local casks=${lib}/Taps/caskroom/homebrew-cask/Casks + local ff=$(\ls ${casks} 2>/dev/null | sed 's/\.rb//g') + + COMPREPLY=($(compgen -W "$ff" -- "$cur")) +} + +__brew_cask_complete_installed () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + local inst=$(brew cask list -1) + COMPREPLY=($(compgen -W "$inst" -- "$cur")) +} + +__brew_cask_complete_caskroom () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + local caskroom_dir=/opt/homebrew-cask/Caskroom/ + local files=$(\ls ${caskroom_dir} 2>/dev/null) + COMPREPLY=($(compgen -W "$files" -- "$cur")) +} + +_brew_cask_cleanup () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + case "$cur" in + -*) + __brew_caskcomp "--force" + return + ;; + esac + __brew_cask_complete_installed +} + +_brew_cask_fetch () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + local prv=$(__brew_caskcomp_prev) + case "$cur" in + -*) + __brew_caskcomp "--force" + return + ;; + esac + __brew_cask_complete_formulae +} + +_brew_cask_list () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + + case "$cur" in + -*) + __brew_caskcomp "-1 -l --versions" + return + ;; + esac + + __brew_cask_complete_installed +} + +_brew_cask_uninstall () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + case "$cur" in + -*) + __brew_caskcomp "--force" + return + ;; + esac + __brew_cask_complete_installed +} + +_brew_cask () +{ + local i=1 cmd + + # find the subcommand + while [[ $i -lt $COMP_CWORD ]]; do + local s="${COMP_WORDS[i]}" + case "$s" in + --*) + cmd="$s" + break + ;; + -*) + ;; + cask) + ;; + *) + cmd="$s" + break + ;; + esac + i=$((++i)) + done + + if [[ $i -eq $COMP_CWORD ]]; then + __brew_caskcomp "abv audit cat cleanup create doctor edit fetch home info install list ls remove rm search uninstall zap -S --force --caskroom --verbose --appdir --colorpickerdir --prefpanedir --qlplugindir --fontdir --servicedir --input_methoddir --internet_plugindir --screen_saverdir --no-binaries --binarydir --debug" + return + fi + + # subcommands have their own completion functions + case "$cmd" in + audit) __brew_cask_complete_formulae ;; + cat) __brew_cask_complete_formulae ;; + cleanup) _brew_cask_cleanup ;; + doctor) ;; + edit) __brew_cask_complete_formulae ;; + fetch) _brew_cask_fetch ;; + home) __brew_cask_complete_formulae ;; + info|abv) __brew_cask_complete_formulae ;; + install|instal) __brew_cask_complete_formulae ;; + list|ls) _brew_cask_list ;; + search) ;; + uninstall|remove|rm) _brew_cask_uninstall ;; + zap) __brew_cask_complete_caskroom ;; + *) ;; + esac +} + _brew() { local i=1 cmd @@ -578,6 +745,7 @@ _brew() { analytics) _brew_analytics ;; audit) __brew_complete_formulae ;; bottle) _brew_bottle ;; + cask) _brew_cask ;; cat) __brew_complete_formulae ;; cleanup) _brew_cleanup ;; create) _brew_create ;; diff --git a/completions/bash/brew-cask b/completions/bash/brew-cask deleted file mode 100644 index 369f0dc741..0000000000 --- a/completions/bash/brew-cask +++ /dev/null @@ -1,182 +0,0 @@ -# Bash completion script for brew-cask(1) - -__brew_caskcomp_words_include () -{ - local i=1 - while [[ $i -lt $COMP_CWORD ]]; do - if [[ "${COMP_WORDS[i]}" = "$1" ]]; then - return 0 - fi - i=$((++i)) - done - return 1 -} - -# Find the previous non-switch word -__brew_caskcomp_prev () -{ - local idx=$((COMP_CWORD - 1)) - local prv="${COMP_WORDS[idx]}" - while [[ $prv == -* ]]; do - idx=$((--idx)) - prv="${COMP_WORDS[idx]}" - done - echo "$prv" -} - -__brew_caskcomp () -{ - # break $1 on space, tab, and newline characters, - # and turn it into a newline separated list of words - local list s sep=$'\n' IFS=$' '$'\t'$'\n' - local cur="${COMP_WORDS[COMP_CWORD]}" - - for s in $1; do - __brew_caskcomp_words_include "$s" && continue - list="$list$s$sep" - done - - IFS=$sep - COMPREPLY=($(compgen -W "$list" -- "$cur")) -} - -# Don't use __brew_caskcomp() in any of the __brew_cask_complete_foo functions, as -# it is too slow and is not worth it just for duplicate elimination. -__brew_cask_complete_formulae () -{ - local cur="${COMP_WORDS[COMP_CWORD]}" - local lib=$(brew --repository)/Library - local taps=${lib}/Taps - local casks=${lib}/Taps/caskroom/homebrew-cask/Casks - local ff=$(\ls ${casks} 2>/dev/null | sed 's/\.rb//g') - - COMPREPLY=($(compgen -W "$ff" -- "$cur")) -} - -__brew_cask_complete_installed () -{ - local cur="${COMP_WORDS[COMP_CWORD]}" - local inst=$(brew-cask list -1) - COMPREPLY=($(compgen -W "$inst" -- "$cur")) -} - -__brew_cask_complete_caskroom () -{ - local cur="${COMP_WORDS[COMP_CWORD]}" - local caskroom_dir=/opt/homebrew-cask/Caskroom/ - local files=$(\ls ${caskroom_dir} 2>/dev/null) - COMPREPLY=($(compgen -W "$files" -- "$cur")) -} - -_brew_cask_cleanup () -{ - local cur="${COMP_WORDS[COMP_CWORD]}" - case "$cur" in - -*) - __brew_caskcomp "--force" - return - ;; - esac - __brew_cask_complete_installed -} - -_brew_cask_fetch () -{ - local cur="${COMP_WORDS[COMP_CWORD]}" - local prv=$(__brew_caskcomp_prev) - case "$cur" in - -*) - __brew_caskcomp "--force" - return - ;; - esac - __brew_cask_complete_formulae -} - -_brew_cask_list () -{ - local cur="${COMP_WORDS[COMP_CWORD]}" - - case "$cur" in - -*) - __brew_caskcomp "-1 -l --versions" - return - ;; - esac - - __brew_cask_complete_installed -} - -_brew_cask_uninstall () -{ - local cur="${COMP_WORDS[COMP_CWORD]}" - case "$cur" in - -*) - __brew_caskcomp "--force" - return - ;; - esac - __brew_cask_complete_installed -} - -_brew_cask_update () -{ - local cur="${COMP_WORDS[COMP_CWORD]}" - case "$cur" in - -*) - __brew_caskcomp "--rebase --verbose" - return - ;; - esac -} - -_brew_cask () -{ - local i=1 cmd - - # find the subcommand - while [[ $i -lt $COMP_CWORD ]]; do - local s="${COMP_WORDS[i]}" - case "$s" in - --*) - cmd="$s" - break - ;; - -*) - ;; - *) - cmd="$s" - break - ;; - esac - i=$((++i)) - done - - if [[ $i -eq $COMP_CWORD ]]; then - __brew_caskcomp "abv alfred audit cat cleanup create doctor edit fetch home info install list ls remove rm search uninstall update zap -S --force --caskroom --verbose --appdir --colorpickerdir --prefpanedir --qlplugindir --fontdir --servicedir --input_methoddir --internet_plugindir --screen_saverdir --no-binaries --binarydir --debug" - return - fi - - # subcommands have their own completion functions - case "$cmd" in - audit) __brew_cask_complete_formulae ;; - cat|edit|home) __brew_cask_complete_formulae ;; - cleanup) _brew_cask_cleanup ;; - fetch) _brew_cask_fetch ;; - info|abv) __brew_cask_complete_formulae ;; - install|instal) __brew_cask_complete_formulae ;; - list|ls) _brew_cask_list ;; - uninstall|remove|rm) _brew_cask_uninstall ;; - update) _brew_cask_update ;; - zap) __brew_cask_complete_caskroom ;; - *) ;; - esac -} - -# keep around for compatibility -_brew_cask_to_completion () -{ - _brew_cask -} - -complete -o bashdefault -o default -F _brew_cask brew-cask