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_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() {
|
_brew() {
|
||||||
local i=1 cmd
|
local i=1 cmd
|
||||||
|
|
||||||
@ -578,6 +745,7 @@ _brew() {
|
|||||||
analytics) _brew_analytics ;;
|
analytics) _brew_analytics ;;
|
||||||
audit) __brew_complete_formulae ;;
|
audit) __brew_complete_formulae ;;
|
||||||
bottle) _brew_bottle ;;
|
bottle) _brew_bottle ;;
|
||||||
|
cask) _brew_cask ;;
|
||||||
cat) __brew_complete_formulae ;;
|
cat) __brew_complete_formulae ;;
|
||||||
cleanup) _brew_cleanup ;;
|
cleanup) _brew_cleanup ;;
|
||||||
create) _brew_create ;;
|
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