Appease the masses

Signed-off-by: Jack Nagel <jacknagel@gmail.com>
This commit is contained in:
Jack Nagel 2012-03-16 19:09:24 -05:00
parent ab01c1e357
commit ee0041f290

View File

@ -37,403 +37,405 @@
__brewcomp_words_include () __brewcomp_words_include ()
{ {
local i=1 local i=1
while [[ $i -lt $COMP_CWORD ]]; do while [[ $i -lt $COMP_CWORD ]]; do
if [[ "${COMP_WORDS[i]}" = "$1" ]]; then if [[ "${COMP_WORDS[i]}" = "$1" ]]; then
return 0 return 0
fi fi
i=$((++i)) i=$((++i))
done done
return 1 return 1
} }
# Find the previous non-switch word # Find the previous non-switch word
__brewcomp_prev () __brewcomp_prev ()
{ {
local idx=$((COMP_CWORD - 1)) local idx=$((COMP_CWORD - 1))
local prv="${COMP_WORDS[idx]}" local prv="${COMP_WORDS[idx]}"
while [[ $prv == -* ]]; do while [[ $prv == -* ]]; do
idx=$((--idx)) idx=$((--idx))
prv="${COMP_WORDS[idx]}" prv="${COMP_WORDS[idx]}"
done done
echo "$prv" echo "$prv"
} }
__brewcomp () __brewcomp ()
{ {
# break $1 on space, tab, and newline characters, # break $1 on space, tab, and newline characters,
# and turn it into a newline separated list of words # and turn it into a newline separated list of words
local list s sep=$'\n' IFS=$' '$'\t'$'\n' local list s sep=$'\n' IFS=$' '$'\t'$'\n'
local cur="${COMP_WORDS[COMP_CWORD]}" local cur="${COMP_WORDS[COMP_CWORD]}"
for s in $1; do for s in $1; do
__brewcomp_words_include "$s" && continue __brewcomp_words_include "$s" && continue
list="$list$s$sep" list="$list$s$sep"
done done
IFS=$sep IFS=$sep
COMPREPLY=($(compgen -W "$list" -- "$cur")) COMPREPLY=($(compgen -W "$list" -- "$cur"))
} }
# Don't use __brewcomp() in any of the __brew_complete_foo functions, as # Don't use __brewcomp() in any of the __brew_complete_foo functions, as
# it is too slow and is not worth it just for duplicate elimination. # it is too slow and is not worth it just for duplicate elimination.
__brew_complete_formulae () __brew_complete_formulae ()
{ {
local cur="${COMP_WORDS[COMP_CWORD]}" local cur="${COMP_WORDS[COMP_CWORD]}"
local ff=$(\ls $(brew --repository)/Library/Formula 2>/dev/null | sed 's/\.rb//g') local ff=$(\ls $(brew --repository)/Library/Formula 2>/dev/null | sed 's/\.rb//g')
local af=$(\ls $(brew --repository)/Library/Aliases 2>/dev/null | sed 's/\.rb//g') local af=$(\ls $(brew --repository)/Library/Aliases 2>/dev/null | sed 's/\.rb//g')
COMPREPLY=($(compgen -W "$ff $af" -- "$cur")) COMPREPLY=($(compgen -W "$ff $af" -- "$cur"))
} }
__brew_complete_installed () __brew_complete_installed ()
{ {
local cur="${COMP_WORDS[COMP_CWORD]}" local cur="${COMP_WORDS[COMP_CWORD]}"
local inst=$(\ls $(brew --cellar)) local inst=$(\ls $(brew --cellar))
COMPREPLY=($(compgen -W "$inst" -- "$cur")) COMPREPLY=($(compgen -W "$inst" -- "$cur"))
} }
__brew_complete_outdated () __brew_complete_outdated ()
{ {
local cur="${COMP_WORDS[COMP_CWORD]}" local cur="${COMP_WORDS[COMP_CWORD]}"
local od=$(brew outdated --quiet) local od=$(brew outdated --quiet)
COMPREPLY=($(compgen -W "$od" -- "$cur")) COMPREPLY=($(compgen -W "$od" -- "$cur"))
} }
__brew_complete_taps () __brew_complete_taps ()
{ {
__brewcomp "$(\ls $(brew --repository)/Library/Taps 2>/dev/null | sed 's/-/\//g')" __brewcomp "$(\ls $(brew --repository)/Library/Taps 2>/dev/null | sed 's/-/\//g')"
} }
_brew_cleanup () _brew_cleanup ()
{ {
local cur="${COMP_WORDS[COMP_CWORD]}" local cur="${COMP_WORDS[COMP_CWORD]}"
case "$cur" in case "$cur" in
--*) --*)
__brewcomp "--force" __brewcomp "--force"
return return
;; ;;
esac esac
__brew_complete_installed __brew_complete_installed
} }
_brew_create () _brew_create ()
{ {
local cur="${COMP_WORDS[COMP_CWORD]}" local cur="${COMP_WORDS[COMP_CWORD]}"
case "$cur" in case "$cur" in
--*) --*)
__brewcomp "--autotools --cmake --no-fetch" __brewcomp "--autotools --cmake --no-fetch"
return return
;; ;;
esac esac
} }
_brew_deps () _brew_deps ()
{ {
local cur="${COMP_WORDS[COMP_CWORD]}" local cur="${COMP_WORDS[COMP_CWORD]}"
case "$cur" in case "$cur" in
--*) --*)
__brewcomp "--1 --all --tree" __brewcomp "--1 --all --tree"
return return
;; ;;
esac esac
__brew_complete_formulae __brew_complete_formulae
} }
_brew_diy () _brew_diy ()
{ {
local cur="${COMP_WORDS[COMP_CWORD]}" local cur="${COMP_WORDS[COMP_CWORD]}"
case "$cur" in case "$cur" in
--*) --*)
__brewcomp "--set-name --set-version" __brewcomp "--set-name --set-version"
return return
;; ;;
esac esac
} }
_brew_fetch () _brew_fetch ()
{ {
local cur="${COMP_WORDS[COMP_CWORD]}" local cur="${COMP_WORDS[COMP_CWORD]}"
case "$cur" in case "$cur" in
--*) --*)
__brewcomp "--deps --force --HEAD" __brewcomp "--deps --force --HEAD"
return return
;; ;;
esac esac
__brew_complete_formulae __brew_complete_formulae
} }
_brew_info () _brew_info ()
{ {
local cur="${COMP_WORDS[COMP_CWORD]}" local cur="${COMP_WORDS[COMP_CWORD]}"
case "$cur" in case "$cur" in
--*) --*)
__brewcomp "--all --github" __brewcomp "--all --github"
return return
;; ;;
esac esac
__brew_complete_formulae __brew_complete_formulae
} }
_brew_install () _brew_install ()
{ {
local cur="${COMP_WORDS[COMP_CWORD]}" local cur="${COMP_WORDS[COMP_CWORD]}"
local prv=$(__brewcomp_prev) local prv=$(__brewcomp_prev)
case "$cur" in case "$cur" in
--*) --*)
if __brewcomp_words_include "--interactive"; then if __brewcomp_words_include "--interactive"; then
__brewcomp " __brewcomp "
--devel --devel
--force --force
--git --git
--HEAD --HEAD
--use-clang --use-clang
--use-gcc --use-gcc
--use-llvm --use-llvm
" "
else else
__brewcomp " __brewcomp "
--build-from-source --build-from-source
--debug --debug
--devel --devel
--force --force
--fresh --fresh
--HEAD --HEAD
--ignore-dependencies --ignore-dependencies
--interactive --interactive
--use-clang --use-clang
--use-gcc --use-gcc
--use-llvm --use-llvm
--verbose --verbose
$(brew options --compact "$prv") $(brew options --compact "$prv")
" "
fi fi
return return
;; ;;
esac esac
__brew_complete_formulae __brew_complete_formulae
} }
_brew_list () _brew_list ()
{ {
local cur="${COMP_WORDS[COMP_CWORD]}" local cur="${COMP_WORDS[COMP_CWORD]}"
case "$cur" in case "$cur" in
--*) --*)
# options to brew-list are mutually exclusive # options to brew-list are mutually exclusive
if __brewcomp_words_include "--unbrewed"; then if __brewcomp_words_include "--unbrewed"; then
return return
elif __brewcomp_words_include "--verbose"; then elif __brewcomp_words_include "--verbose"; then
return return
elif __brewcomp_words_include "--versions"; then elif __brewcomp_words_include "--versions"; then
return return
else else
__brewcomp "--unbrewed --verbose --versions" __brewcomp "--unbrewed --verbose --versions"
return return
fi fi
;; ;;
esac esac
__brew_complete_installed __brew_complete_installed
} }
_brew_log () _brew_log ()
{ {
# if git-completion is loaded, then we complete git-log options # if git-completion is loaded, then we complete git-log options
declare -F _git_log >/dev/null || return declare -F _git_log >/dev/null || return
local cur="${COMP_WORDS[COMP_CWORD]}" local cur="${COMP_WORDS[COMP_CWORD]}"
case "$cur" in case "$cur" in
--*) --*)
__brewcomp " __brewcomp "
$__git_log_common_options $__git_log_common_options
$__git_log_shortlog_options $__git_log_shortlog_options
$__git_log_gitk_options $__git_log_gitk_options
$__git_diff_common_options $__git_diff_common_options
--walk-reflogs --graph --decorate --walk-reflogs --graph --decorate
--abbrev-commit --oneline --reverse --abbrev-commit --oneline --reverse
" "
return return
;; ;;
esac esac
__brew_complete_formulae __brew_complete_formulae
} }
_brew_options () _brew_options ()
{ {
local cur="${COMP_WORDS[COMP_CWORD]}" local cur="${COMP_WORDS[COMP_CWORD]}"
case "$cur" in case "$cur" in
--*) --*)
__brewcomp "--all --compact --installed" __brewcomp "--all --compact --installed"
return return
;; ;;
esac esac
__brew_complete_formulae __brew_complete_formulae
} }
_brew_outdated () _brew_outdated ()
{ {
local cur="${COMP_WORDS[COMP_CWORD]}" local cur="${COMP_WORDS[COMP_CWORD]}"
case "$cur" in case "$cur" in
--*) --*)
__brewcomp "--quiet" __brewcomp "--quiet"
return return
;; ;;
esac esac
} }
_brew_search () _brew_search ()
{ {
local cur="${COMP_WORDS[COMP_CWORD]}" local cur="${COMP_WORDS[COMP_CWORD]}"
case "$cur" in case "$cur" in
--*) --*)
__brewcomp "--fink --macports" __brewcomp "--fink --macports"
return return
;; ;;
esac esac
} }
_brew_uninstall () _brew_uninstall ()
{ {
local cur="${COMP_WORDS[COMP_CWORD]}" local cur="${COMP_WORDS[COMP_CWORD]}"
case "$cur" in case "$cur" in
--*) --*)
__brewcomp "--force" __brewcomp "--force"
return return
;; ;;
esac esac
__brew_complete_installed __brew_complete_installed
} }
_brew_update () _brew_update ()
{ {
local cur="${COMP_WORDS[COMP_CWORD]}" local cur="${COMP_WORDS[COMP_CWORD]}"
case "$cur" in case "$cur" in
--*) --*)
__brewcomp "--rebase --verbose" __brewcomp "--rebase --verbose"
return return
;; ;;
esac esac
} }
_brew_uses () _brew_uses ()
{ {
local cur="${COMP_WORDS[COMP_CWORD]}" local cur="${COMP_WORDS[COMP_CWORD]}"
case "$cur" in case "$cur" in
--*) --*)
__brewcomp "--installed" __brewcomp "--installed"
return return
;; ;;
esac esac
__brew_complete_formulae __brew_complete_formulae
} }
_brew_versions () _brew_versions ()
{ {
local cur="${COMP_WORDS[COMP_CWORD]}" local cur="${COMP_WORDS[COMP_CWORD]}"
case "$cur" in case "$cur" in
--*) --*)
__brewcomp "--compact" __brewcomp "--compact"
return return
;; ;;
esac esac
__brew_complete_formulae __brew_complete_formulae
} }
__brew_ps1 () __brew_ps1 ()
{ {
[[ -n $HOMEBREW_DEBUG_INSTALL ]] && [[ -n $HOMEBREW_DEBUG_INSTALL ]] &&
printf "${1:- (%s)}" "$HOMEBREW_DEBUG_INSTALL|DEBUG" printf "${1:- (%s)}" "$HOMEBREW_DEBUG_INSTALL|DEBUG"
} }
_brew () _brew ()
{ {
local i=1 cmd local i=1 cmd
# find the subcommand # find the subcommand
while [[ $i -lt $COMP_CWORD ]]; do while [[ $i -lt $COMP_CWORD ]]; do
local s="${COMP_WORDS[i]}" local s="${COMP_WORDS[i]}"
case "$s" in case "$s" in
--*) cmd="$s" --*)
break cmd="$s"
;; break
-*) ;; ;;
*) cmd="$s" -*)
break ;;
;; *)
esac cmd="$s"
i=$((++i)) break
done ;;
esac
i=$((++i))
done
if [[ $i -eq $COMP_CWORD ]]; then if [[ $i -eq $COMP_CWORD ]]; then
local ext=$(\ls $(brew --repository)/Library/Contributions/examples \ local ext=$(\ls $(brew --repository)/Library/Contributions/examples \
2>/dev/null | sed -e "s/\.rb//g" -e "s/brew-//g") 2>/dev/null | sed -e "s/\.rb//g" -e "s/brew-//g")
__brewcomp " __brewcomp "
--cache --cellar --config --cache --cellar --config
--env --prefix --repository --env --prefix --repository
audit audit
cat cat
cleanup cleanup
create create
deps deps
diy configure diy configure
doctor doctor
edit edit
fetch fetch
help help
home home
info abv info abv
install install
link ln link ln
list ls list ls
log log
options options
outdated outdated
prune prune
search search
tap tap
test test
uninstall remove rm uninstall remove rm
unlink unlink
untap untap
update update
upgrade upgrade
uses uses
versions versions
$ext $ext
" "
return return
fi fi
# subcommands have their own completion functions # subcommands have their own completion functions
case "$cmd" in case "$cmd" in
--cache|--cellar|--prefix) --cache|--cellar|--prefix) __brew_complete_formulae ;;
__brew_complete_formulae ;; audit|cat|edit|home) __brew_complete_formulae ;;
audit|cat|edit|home) __brew_complete_formulae ;; link|ln|test|unlink) __brew_complete_installed ;;
link|ln|test|unlink) __brew_complete_installed ;; upgrade) __brew_complete_outdated ;;
upgrade) __brew_complete_outdated ;; cleanup) _brew_cleanup ;;
cleanup) _brew_cleanup ;; create) _brew_create ;;
create) _brew_create ;; deps) _brew_deps ;;
deps) _brew_deps ;; diy|configure) _brew_diy ;;
diy|configure) _brew_diy ;; fetch) _brew_fetch ;;
fetch) _brew_fetch ;; info|abv) _brew_info ;;
info|abv) _brew_info ;; install) _brew_install ;;
install) _brew_install ;; list|ls) _brew_list ;;
list|ls) _brew_list ;; log) _brew_log ;;
log) _brew_log ;; options) _brew_options ;;
options) _brew_options ;; outdated) _brew_outdated ;;
outdated) _brew_outdated ;; search|-S) _brew_search ;;
search|-S) _brew_search ;; uninstall|remove|rm) _brew_uninstall ;;
uninstall|remove|rm) _brew_uninstall ;; untap) __brew_complete_taps ;;
untap) __brew_complete_taps ;; update) _brew_update ;;
update) _brew_update ;; uses) _brew_uses ;;
uses) _brew_uses ;; versions) _brew_versions ;;
versions) _brew_versions ;; *) ;;
*) ;; esac
esac
} }
# keep around for compatibility # keep around for compatibility
_brew_to_completion () _brew_to_completion ()
{ {
_brew _brew
} }
complete -o bashdefault -o default -F _brew brew complete -o bashdefault -o default -F _brew brew