diff options
| author | Andrew Janke | 2018-01-09 14:19:16 -0500 |
|---|---|---|
| committer | GitHub | 2018-01-09 14:19:16 -0500 |
| commit | 9464616897c9ce73e3cd6d571390797aa554e41c (patch) | |
| tree | e55747ae1fb8b41e2867e3a1895b53524a054bca | |
| parent | 311aa724ddb1d738476af6573153c28d6f606054 (diff) | |
| parent | bf574012bcb39d1f9aca36c5a2b9d8e91a312de2 (diff) | |
| download | brew-9464616897c9ce73e3cd6d571390797aa554e41c.tar.bz2 | |
Merge pull request #3646 from apjanke/cask-bash-completion
Cask bash completion
| -rw-r--r-- | completions/bash/brew | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/completions/bash/brew b/completions/bash/brew index 26adef37d..3bde8f926 100644 --- a/completions/bash/brew +++ b/completions/bash/brew @@ -545,6 +545,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 @@ -584,6 +751,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 ;; |
