bash completion: integrate xyb's cask bash completion with core brew completion

This commit is contained in:
Andrew Janke 2018-01-09 02:49:55 -05:00
parent f5c68a6fe3
commit bf574012bc
2 changed files with 168 additions and 182 deletions

View File

@ -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 ;;

View File

@ -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