2010-07-19 09:51:28 -07:00
|
|
|
# Bash completion script for brew(1)
|
2009-09-05 20:47:15 +01:00
|
|
|
#
|
2012-01-21 00:08:35 -06:00
|
|
|
# To use, add the following to your .bashrc:
|
|
|
|
#
|
|
|
|
# . $(brew --repository)/Library/Contributions/brew_bash_completion.sh
|
|
|
|
#
|
|
|
|
# Alternatively, if you have installed the bash-completion package,
|
|
|
|
# you can create a symlink to this file in one of the following directories:
|
|
|
|
#
|
|
|
|
# $(brew --prefix)/etc/bash_completion.d
|
|
|
|
# $(brew --prefix)/share/bash-completion/completions
|
|
|
|
#
|
|
|
|
# and bash-completion will source it automatically.
|
2011-11-10 23:47:04 -06:00
|
|
|
#
|
|
|
|
# The __brew_ps1() function can be used to annotate your PS1 with
|
|
|
|
# Homebrew debugging information; it behaves similarly to the __git_ps1()
|
|
|
|
# function provided by the git's bash completion script.
|
|
|
|
#
|
|
|
|
# For example, the prompt string
|
2012-01-21 00:08:35 -06:00
|
|
|
#
|
2011-11-10 23:47:04 -06:00
|
|
|
# PS1='\u@\h \W $(__brew_ps1 "(%s)") $'
|
|
|
|
#
|
|
|
|
# would result in a prompt like
|
2012-01-21 00:08:35 -06:00
|
|
|
#
|
2011-11-10 23:47:04 -06:00
|
|
|
# user@hostname cwd $
|
|
|
|
#
|
|
|
|
# but if you are currently engaged in an interactive or debug install,
|
|
|
|
# (i.e., you invoked `brew install` with either '-i' or '-d'), then the
|
|
|
|
# prompt would look like
|
2012-01-21 00:08:35 -06:00
|
|
|
#
|
|
|
|
# user@hostname cwd (<formula_name>|DEBUG) $
|
2011-11-10 23:47:04 -06:00
|
|
|
#
|
|
|
|
# You can customize the output string, e.g. $(__brew_ps1 "[%s]") would
|
2012-01-21 00:08:35 -06:00
|
|
|
# output "[<formula_name>|DEBUG]". The default (if you do not provide a
|
|
|
|
# format argument) is to print "(<formula_name>|DEBUG)" prefixed with a
|
2011-11-10 23:47:04 -06:00
|
|
|
# single space.
|
2009-07-31 09:45:04 -07:00
|
|
|
|
2012-01-21 00:08:35 -06:00
|
|
|
__brewcomp_words_include ()
|
|
|
|
{
|
2012-03-16 19:09:24 -05:00
|
|
|
local i=1
|
|
|
|
while [[ $i -lt $COMP_CWORD ]]; do
|
|
|
|
if [[ "${COMP_WORDS[i]}" = "$1" ]]; then
|
|
|
|
return 0
|
|
|
|
fi
|
|
|
|
i=$((++i))
|
|
|
|
done
|
|
|
|
return 1
|
2012-01-21 00:08:35 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
# Find the previous non-switch word
|
|
|
|
__brewcomp_prev ()
|
|
|
|
{
|
2012-03-16 19:09:24 -05:00
|
|
|
local idx=$((COMP_CWORD - 1))
|
|
|
|
local prv="${COMP_WORDS[idx]}"
|
|
|
|
while [[ $prv == -* ]]; do
|
|
|
|
idx=$((--idx))
|
|
|
|
prv="${COMP_WORDS[idx]}"
|
|
|
|
done
|
|
|
|
echo "$prv"
|
2012-01-21 00:08:35 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
__brewcomp ()
|
|
|
|
{
|
2012-03-16 19:09:24 -05:00
|
|
|
# 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
|
|
|
|
__brewcomp_words_include "$s" && continue
|
|
|
|
list="$list$s$sep"
|
|
|
|
done
|
|
|
|
|
|
|
|
IFS=$sep
|
|
|
|
COMPREPLY=($(compgen -W "$list" -- "$cur"))
|
2012-01-21 00:08:35 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
# 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.
|
|
|
|
__brew_complete_formulae ()
|
|
|
|
{
|
2012-03-16 19:09:24 -05:00
|
|
|
local cur="${COMP_WORDS[COMP_CWORD]}"
|
|
|
|
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')
|
2012-03-16 19:11:30 -05:00
|
|
|
local tf tap
|
|
|
|
|
|
|
|
for dir in $(\ls $(brew --repository)/Library/Taps 2>/dev/null); do
|
|
|
|
tap="$(echo "$dir" | sed 's|-|/|g')"
|
|
|
|
tf="$tf $(\ls -1R "$(brew --repository)/Library/Taps/$dir" 2>/dev/null |
|
|
|
|
grep '.\+.rb' | sed -E 's|(.+)\.rb|'"${tap}"'/\1|g')"
|
|
|
|
done
|
|
|
|
|
|
|
|
COMPREPLY=($(compgen -W "$ff $af $tf" -- "$cur"))
|
2012-01-21 00:08:35 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
__brew_complete_installed ()
|
|
|
|
{
|
2012-03-16 19:09:24 -05:00
|
|
|
local cur="${COMP_WORDS[COMP_CWORD]}"
|
|
|
|
local inst=$(\ls $(brew --cellar))
|
|
|
|
COMPREPLY=($(compgen -W "$inst" -- "$cur"))
|
2012-01-21 00:08:35 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
__brew_complete_outdated ()
|
|
|
|
{
|
2012-03-16 19:09:24 -05:00
|
|
|
local cur="${COMP_WORDS[COMP_CWORD]}"
|
|
|
|
local od=$(brew outdated --quiet)
|
|
|
|
COMPREPLY=($(compgen -W "$od" -- "$cur"))
|
2012-01-21 00:08:35 -06:00
|
|
|
}
|
|
|
|
|
2012-03-23 22:42:43 -05:00
|
|
|
__brew_complete_tapped ()
|
2012-03-16 16:52:35 -05:00
|
|
|
{
|
2012-03-16 19:09:24 -05:00
|
|
|
__brewcomp "$(\ls $(brew --repository)/Library/Taps 2>/dev/null | sed 's/-/\//g')"
|
2012-03-16 16:52:35 -05:00
|
|
|
}
|
|
|
|
|
2012-03-23 22:42:43 -05:00
|
|
|
__brew_complete_taps ()
|
|
|
|
{
|
|
|
|
if [[ -z "$__brew_cached_taps" ]]; then
|
|
|
|
__brew_cached_taps="$(/usr/bin/ruby -e '
|
|
|
|
require "open-uri"
|
|
|
|
require "yaml"
|
|
|
|
|
|
|
|
begin
|
|
|
|
uri = URI.parse("http://github.com/api/v2/yaml/repos/search/homebrew")
|
|
|
|
|
|
|
|
open uri do |f|
|
|
|
|
YAML::load(f.read)["repositories"].each do |repo|
|
|
|
|
if repo[:name] =~ /^homebrew-(\w+)$/
|
|
|
|
puts tap = if repo[:username] == "Homebrew"
|
|
|
|
"homebrew/#{$1}"
|
|
|
|
else
|
|
|
|
repo[:username]+"/"+$1
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
rescue
|
|
|
|
nil
|
|
|
|
end
|
|
|
|
' 2>/dev/null)"
|
|
|
|
fi
|
|
|
|
|
|
|
|
__brewcomp "$__brew_cached_taps"
|
|
|
|
}
|
|
|
|
|
2012-01-21 00:08:35 -06:00
|
|
|
_brew_cleanup ()
|
|
|
|
{
|
2012-03-16 19:09:24 -05:00
|
|
|
local cur="${COMP_WORDS[COMP_CWORD]}"
|
|
|
|
case "$cur" in
|
|
|
|
--*)
|
|
|
|
__brewcomp "--force"
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
__brew_complete_installed
|
2012-01-21 00:08:35 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
_brew_create ()
|
|
|
|
{
|
2012-03-16 19:09:24 -05:00
|
|
|
local cur="${COMP_WORDS[COMP_CWORD]}"
|
|
|
|
case "$cur" in
|
|
|
|
--*)
|
|
|
|
__brewcomp "--autotools --cmake --no-fetch"
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
2012-01-21 00:08:35 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
_brew_deps ()
|
|
|
|
{
|
2012-03-16 19:09:24 -05:00
|
|
|
local cur="${COMP_WORDS[COMP_CWORD]}"
|
|
|
|
case "$cur" in
|
|
|
|
--*)
|
|
|
|
__brewcomp "--1 --all --tree"
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
__brew_complete_formulae
|
2012-01-21 00:08:35 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
_brew_diy ()
|
|
|
|
{
|
2012-03-16 19:09:24 -05:00
|
|
|
local cur="${COMP_WORDS[COMP_CWORD]}"
|
|
|
|
case "$cur" in
|
|
|
|
--*)
|
|
|
|
__brewcomp "--set-name --set-version"
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
2012-01-21 00:08:35 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
_brew_fetch ()
|
|
|
|
{
|
2012-03-16 19:09:24 -05:00
|
|
|
local cur="${COMP_WORDS[COMP_CWORD]}"
|
|
|
|
case "$cur" in
|
|
|
|
--*)
|
|
|
|
__brewcomp "--deps --force --HEAD"
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
__brew_complete_formulae
|
2012-01-21 00:08:35 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
_brew_info ()
|
|
|
|
{
|
2012-03-16 19:09:24 -05:00
|
|
|
local cur="${COMP_WORDS[COMP_CWORD]}"
|
|
|
|
case "$cur" in
|
|
|
|
--*)
|
|
|
|
__brewcomp "--all --github"
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
__brew_complete_formulae
|
2012-01-21 00:08:35 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
_brew_install ()
|
|
|
|
{
|
2012-03-16 19:09:24 -05:00
|
|
|
local cur="${COMP_WORDS[COMP_CWORD]}"
|
|
|
|
local prv=$(__brewcomp_prev)
|
|
|
|
|
|
|
|
case "$cur" in
|
|
|
|
--*)
|
|
|
|
if __brewcomp_words_include "--interactive"; then
|
|
|
|
__brewcomp "
|
|
|
|
--devel
|
|
|
|
--force
|
|
|
|
--git
|
|
|
|
--HEAD
|
|
|
|
--use-clang
|
|
|
|
--use-gcc
|
|
|
|
--use-llvm
|
|
|
|
"
|
|
|
|
else
|
|
|
|
__brewcomp "
|
|
|
|
--build-from-source
|
|
|
|
--debug
|
|
|
|
--devel
|
|
|
|
--force
|
|
|
|
--fresh
|
|
|
|
--HEAD
|
|
|
|
--ignore-dependencies
|
|
|
|
--interactive
|
|
|
|
--use-clang
|
|
|
|
--use-gcc
|
|
|
|
--use-llvm
|
|
|
|
--verbose
|
|
|
|
$(brew options --compact "$prv")
|
|
|
|
"
|
|
|
|
fi
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
__brew_complete_formulae
|
2012-01-21 00:08:35 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
_brew_list ()
|
|
|
|
{
|
2012-03-16 19:09:24 -05:00
|
|
|
local cur="${COMP_WORDS[COMP_CWORD]}"
|
|
|
|
case "$cur" in
|
|
|
|
--*)
|
|
|
|
# options to brew-list are mutually exclusive
|
|
|
|
if __brewcomp_words_include "--unbrewed"; then
|
|
|
|
return
|
|
|
|
elif __brewcomp_words_include "--verbose"; then
|
|
|
|
return
|
|
|
|
elif __brewcomp_words_include "--versions"; then
|
|
|
|
return
|
|
|
|
else
|
|
|
|
__brewcomp "--unbrewed --verbose --versions"
|
|
|
|
return
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
__brew_complete_installed
|
2012-01-21 00:08:35 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
_brew_log ()
|
|
|
|
{
|
2012-03-16 19:09:24 -05:00
|
|
|
# if git-completion is loaded, then we complete git-log options
|
|
|
|
declare -F _git_log >/dev/null || return
|
|
|
|
local cur="${COMP_WORDS[COMP_CWORD]}"
|
|
|
|
case "$cur" in
|
|
|
|
--*)
|
|
|
|
__brewcomp "
|
|
|
|
$__git_log_common_options
|
|
|
|
$__git_log_shortlog_options
|
|
|
|
$__git_log_gitk_options
|
|
|
|
$__git_diff_common_options
|
|
|
|
--walk-reflogs --graph --decorate
|
|
|
|
--abbrev-commit --oneline --reverse
|
|
|
|
"
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
__brew_complete_formulae
|
2012-01-21 00:08:35 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
_brew_options ()
|
|
|
|
{
|
2012-03-16 19:09:24 -05:00
|
|
|
local cur="${COMP_WORDS[COMP_CWORD]}"
|
|
|
|
case "$cur" in
|
|
|
|
--*)
|
|
|
|
__brewcomp "--all --compact --installed"
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
__brew_complete_formulae
|
2012-01-21 00:08:35 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
_brew_outdated ()
|
|
|
|
{
|
2012-03-16 19:09:24 -05:00
|
|
|
local cur="${COMP_WORDS[COMP_CWORD]}"
|
|
|
|
case "$cur" in
|
|
|
|
--*)
|
|
|
|
__brewcomp "--quiet"
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
2012-01-21 00:08:35 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
_brew_search ()
|
|
|
|
{
|
2012-03-16 19:09:24 -05:00
|
|
|
local cur="${COMP_WORDS[COMP_CWORD]}"
|
|
|
|
case "$cur" in
|
|
|
|
--*)
|
|
|
|
__brewcomp "--fink --macports"
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
2012-01-21 00:08:35 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
_brew_uninstall ()
|
|
|
|
{
|
2012-03-16 19:09:24 -05:00
|
|
|
local cur="${COMP_WORDS[COMP_CWORD]}"
|
|
|
|
case "$cur" in
|
|
|
|
--*)
|
|
|
|
__brewcomp "--force"
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
__brew_complete_installed
|
2012-01-21 00:08:35 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
_brew_update ()
|
|
|
|
{
|
2012-03-16 19:09:24 -05:00
|
|
|
local cur="${COMP_WORDS[COMP_CWORD]}"
|
|
|
|
case "$cur" in
|
|
|
|
--*)
|
|
|
|
__brewcomp "--rebase --verbose"
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
2012-01-21 00:08:35 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
_brew_uses ()
|
|
|
|
{
|
2012-03-16 19:09:24 -05:00
|
|
|
local cur="${COMP_WORDS[COMP_CWORD]}"
|
|
|
|
case "$cur" in
|
|
|
|
--*)
|
|
|
|
__brewcomp "--installed"
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
__brew_complete_formulae
|
2012-01-21 00:08:35 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
_brew_versions ()
|
|
|
|
{
|
2012-03-16 19:09:24 -05:00
|
|
|
local cur="${COMP_WORDS[COMP_CWORD]}"
|
|
|
|
case "$cur" in
|
|
|
|
--*)
|
|
|
|
__brewcomp "--compact"
|
|
|
|
return
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
__brew_complete_formulae
|
2009-07-28 01:45:17 -07:00
|
|
|
}
|
|
|
|
|
2011-11-10 23:47:04 -06:00
|
|
|
__brew_ps1 ()
|
|
|
|
{
|
2012-03-16 19:09:24 -05:00
|
|
|
[[ -n $HOMEBREW_DEBUG_INSTALL ]] &&
|
|
|
|
printf "${1:- (%s)}" "$HOMEBREW_DEBUG_INSTALL|DEBUG"
|
2011-11-10 23:47:04 -06:00
|
|
|
}
|
|
|
|
|
2012-01-21 00:08:35 -06:00
|
|
|
_brew ()
|
|
|
|
{
|
2012-03-16 19:09:24 -05:00
|
|
|
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
|
2012-03-18 15:33:21 +13:00
|
|
|
local ext=$(\ls $(brew --repository)/Library/Contributions/cmds \
|
2012-03-16 19:09:24 -05:00
|
|
|
2>/dev/null | sed -e "s/\.rb//g" -e "s/brew-//g")
|
|
|
|
__brewcomp "
|
|
|
|
--cache --cellar --config
|
|
|
|
--env --prefix --repository
|
|
|
|
audit
|
|
|
|
cat
|
|
|
|
cleanup
|
|
|
|
create
|
|
|
|
deps
|
|
|
|
diy configure
|
|
|
|
doctor
|
|
|
|
edit
|
|
|
|
fetch
|
|
|
|
help
|
|
|
|
home
|
|
|
|
info abv
|
|
|
|
install
|
|
|
|
link ln
|
|
|
|
list ls
|
|
|
|
log
|
|
|
|
options
|
|
|
|
outdated
|
|
|
|
prune
|
|
|
|
search
|
|
|
|
tap
|
|
|
|
test
|
|
|
|
uninstall remove rm
|
|
|
|
unlink
|
|
|
|
untap
|
|
|
|
update
|
|
|
|
upgrade
|
|
|
|
uses
|
|
|
|
versions
|
|
|
|
$ext
|
|
|
|
"
|
|
|
|
return
|
|
|
|
fi
|
|
|
|
|
|
|
|
# subcommands have their own completion functions
|
|
|
|
case "$cmd" in
|
|
|
|
--cache|--cellar|--prefix) __brew_complete_formulae ;;
|
|
|
|
audit|cat|edit|home) __brew_complete_formulae ;;
|
|
|
|
link|ln|test|unlink) __brew_complete_installed ;;
|
|
|
|
upgrade) __brew_complete_outdated ;;
|
|
|
|
cleanup) _brew_cleanup ;;
|
|
|
|
create) _brew_create ;;
|
|
|
|
deps) _brew_deps ;;
|
|
|
|
diy|configure) _brew_diy ;;
|
|
|
|
fetch) _brew_fetch ;;
|
|
|
|
info|abv) _brew_info ;;
|
|
|
|
install) _brew_install ;;
|
|
|
|
list|ls) _brew_list ;;
|
|
|
|
log) _brew_log ;;
|
|
|
|
options) _brew_options ;;
|
|
|
|
outdated) _brew_outdated ;;
|
|
|
|
search|-S) _brew_search ;;
|
2012-03-23 22:42:43 -05:00
|
|
|
tap) __brew_complete_taps ;;
|
2012-03-16 19:09:24 -05:00
|
|
|
uninstall|remove|rm) _brew_uninstall ;;
|
2012-03-23 22:42:43 -05:00
|
|
|
untap) __brew_complete_tapped ;;
|
2012-03-16 19:09:24 -05:00
|
|
|
update) _brew_update ;;
|
|
|
|
uses) _brew_uses ;;
|
|
|
|
versions) _brew_versions ;;
|
|
|
|
*) ;;
|
|
|
|
esac
|
2012-01-21 00:08:35 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
# keep around for compatibility
|
|
|
|
_brew_to_completion ()
|
|
|
|
{
|
2012-03-16 19:09:24 -05:00
|
|
|
_brew
|
2012-01-21 00:08:35 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
complete -o bashdefault -o default -F _brew brew
|