183 lines
4.2 KiB
Plaintext
183 lines
4.2 KiB
Plaintext
# 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
|