bash completion: integrate xyb's cask bash completion with core brew completion
This commit is contained in:
parent
f5c68a6fe3
commit
bf574012bc
@ -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 ;;
|
||||
|
@ -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
|
Loading…
x
Reference in New Issue
Block a user