diff options
| author | Xu Cheng | 2016-04-03 18:34:17 +0800 |
|---|---|---|
| committer | Xu Cheng | 2016-04-03 18:34:17 +0800 |
| commit | edf000e4cd30c3626ccc28c52ed32f2d84a200dd (patch) | |
| tree | 9825fa984f2aac3245be456dbdcfa73fbc2a8205 /etc/bash_completion.d | |
| parent | e70a3552d3faddd0afd2535a03c31b8c50be901a (diff) | |
| download | brew-0.9.9.tar.bz2 | |
Core/formula separation Part 2(b)0.9.9
* move shell completion scripts to where can be auto picked up
Let's use switching new remote as opportunity to put shell completion
scripts to where they should be and avoid git conflict during the process.
* add Library/Formula and Library/Aliases symlinks
Formulae and Aliases has been relocated to homebrew/core tap.
The symlinks are pointed to new location to keep backward compatibility.
* remove formula_renames and tap_migrations
They have been replaced by the json files in the core tap.
* update: set new remote
* bump Homebrew version to 0.9.9
Diffstat (limited to 'etc/bash_completion.d')
| -rw-r--r-- | etc/bash_completion.d/brew | 642 |
1 files changed, 642 insertions, 0 deletions
diff --git a/etc/bash_completion.d/brew b/etc/bash_completion.d/brew new file mode 100644 index 000000000..0a709d7f2 --- /dev/null +++ b/etc/bash_completion.d/brew @@ -0,0 +1,642 @@ +# Bash completion script for brew(1) + +__brewcomp_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 +__brewcomp_prev () +{ + local idx=$((COMP_CWORD - 1)) + local prv="${COMP_WORDS[idx]}" + while [[ $prv == -* ]]; do + idx=$((--idx)) + prv="${COMP_WORDS[idx]}" + done + echo "$prv" +} + +__brewcomp () +{ + # 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")) +} + +# 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 () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + local lib=$(brew --repository)/Library + local taps=${lib}/Taps + local ff=$(\ls ${lib}/Formula 2>/dev/null | sed 's/\.rb//g') + local af=$(\ls ${lib}/Aliases 2>/dev/null) + local tf file + + for file in ${taps}/*/*/*.rb ${taps}/*/*/Formula/*.rb ${taps}/*/*/HomebrewFormula/*.rb; do + [ -f "$file" ] || continue + file=${file/"Formula/"/} + file=${file/"HomebrewFormula/"/} + file=${file#${lib}/Taps/} + file=${file%.rb} + file=${file/homebrew-/} + tf="${tf} ${file}" + done + + COMPREPLY=($(compgen -W "$ff $af $tf" -- "$cur")) +} + +__brew_complete_installed () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + local inst=$(\ls $(brew --cellar)) + COMPREPLY=($(compgen -W "$inst" -- "$cur")) +} + +__brew_complete_outdated () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + local od=$(brew outdated --quiet) + COMPREPLY=($(compgen -W "$od" -- "$cur")) +} + +__brew_complete_versions () +{ + local formula="$1" + local versions=$(brew list --versions "$formula") + local cur="${COMP_WORDS[COMP_CWORD]}" + COMPREPLY=($(compgen -W "$versions" -X "$formula" -- "$cur")) +} + +__brew_complete_logs () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + local logs=$(ls ${HOMEBREW_LOGS:-~/Library/Logs/Homebrew/}) + COMPREPLY=($(compgen -W "$logs" -- "$cur")) +} + +_brew_switch () +{ + case "$COMP_CWORD" in + 2) __brew_complete_installed ;; + 3) __brew_complete_versions "${COMP_WORDS[COMP_CWORD-1]}" ;; + *) ;; + esac +} + +__brew_complete_tapped () +{ + local taplib=$(brew --repository)/Library/Taps + local dir taps + + for dir in ${taplib}/*/*; do + [ -d "$dir" ] || continue + dir=${dir#${taplib}/} + dir=${dir/homebrew-/} + taps="$taps $dir" + done + __brewcomp "$taps" +} + +_brew_tap_unpin () +{ + __brewcomp "$(brew tap --list-pinned)" +} + +_brew_complete_tap () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + case "$cur" in + --*) + __brewcomp "--repair --list-official --list-pinned" + return + ;; + esac + __brewcomp "$(brew tap --list-official)" +} + +_brew_bottle () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + case "$cur" in + --*) + __brewcomp "--merge --rb --write --root_url=" + return + ;; + esac + __brew_complete_installed +} + +_brew_cleanup () +{ + __brew_complete_installed +} + +_brew_create () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + case "$cur" in + --*) + __brewcomp "--autotools --cmake --no-fetch --set-name --set-version" + return + ;; + esac +} + +_brew_deps () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + case "$cur" in + --*) + __brewcomp "--1 --all --tree" + return + ;; + esac + __brew_complete_formulae +} + +_brew_desc () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + case "$cur" in + --*) + __brewcomp "--search --name --description" + return + ;; + esac + __brew_complete_formulae +} + +_brew_doctor () { + local cur="${COMP_WORDS[COMP_CWORD]}" + __brewcomp "$(brew doctor --list-checks)" +} + +_brew_diy () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + case "$cur" in + --*) + __brewcomp "--set-name --set-version" + return + ;; + esac +} + +_brew_fetch () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + local prv=$(__brewcomp_prev) + case "$cur" in + --*) + __brewcomp " + --deps --force + --devel --HEAD + --build-from-source --force-bottle --build-bottle + --retry + $(brew options --compact "$prv" 2>/dev/null) + " + return + ;; + esac + __brew_complete_formulae +} + +_brew_gist_logs () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + case "$cur" in + --*) + __brewcomp "--new-issue" + return + ;; + esac + __brew_complete_logs +} + +_brew_info () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + case "$cur" in + --*) + __brewcomp "--all --github --installed --json=v1" + return + ;; + esac + __brew_complete_formulae +} + +_brew_install () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + local prv=$(__brewcomp_prev) + + case "$cur" in + --*) + if __brewcomp_words_include "--interactive"; then + __brewcomp "--devel --git --HEAD" + else + __brewcomp " + --build-from-source --build-bottle --force-bottle + --debug + --devel + --HEAD + --ignore-dependencies + --interactive + --only-dependencies + --verbose + $(brew options --compact "$prv" 2>/dev/null) + " + fi + return + ;; + esac + __brew_complete_formulae +} + +_brew_irb () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + case "$cur" in + --*) + __brewcomp "--examples" + return + ;; + esac +} + +_brew_link () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + case "$cur" in + --*) + __brewcomp "--dry-run --overwrite --force" + return + ;; + esac + __brew_complete_installed +} + +_brew_linkapps () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + case "$cur" in + --*) + __brewcomp "--local" + return + ;; + esac + __brew_complete_installed +} + +_brew_list () +{ + local allopts="--unbrewed --verbose --pinned --versions --multiple" + local cur="${COMP_WORDS[COMP_CWORD]}" + + case "$cur" in + --*) + # most 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 "--pinned"; then + return + # --multiple only applies with --versions + elif __brewcomp_words_include "--multiple"; then + __brewcomp "--versions" + return + elif __brewcomp_words_include "--versions"; then + __brewcomp "--multiple" + return + else + __brewcomp "$allopts" + return + fi + ;; + esac + + # --multiple excludes formulae and *implies* --versions... + if __brewcomp_words_include "--multiple"; then + __brewcomp "--versions" + else + __brew_complete_installed + fi +} + +_brew_log () +{ + # 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 +} + +_brew_man () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + case "$cur" in + --*) + __brewcomp "--link --server --verbose" + return + ;; + esac +} + +_brew_options () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + case "$cur" in + --*) + __brewcomp "--all --compact --installed" + return + ;; + esac + __brew_complete_formulae +} + +_brew_outdated () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + case "$cur" in + --*) + __brewcomp "--quiet --json=v1" + return + ;; + esac +} + +_brew_postinstall () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + case "$cur" in + --*) + __brewcomp "--debug --sandbox" + return + ;; + esac + __brew_complete_installed +} + +_brew_prune () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + case "$cur" in + --*) + __brewcomp "--dry-run --verbose" + return + ;; + esac +} + +_brew_pull () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + case "$cur" in + --*) + __brewcomp "--bottle --bump --clean --ignore-whitespace --install --resolve" + return + ;; + esac +} + +_brew_readall () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + case "$cur" in + --*) + __brewcomp "--syntax" + return + ;; + esac + __brew_complete_tapped +} + +_brew_search () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + case "$cur" in + --*) + __brewcomp "--debian --desc --fedora --fink --macports --opensuse --ubuntu" + return + ;; + esac +} + +_brew_style () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + case "$cur" in + --*) + __brewcomp "--fix" + return + ;; + esac + __brew_complete_formulae +} + +_brew_tap_readme () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + case "$cur" in + --*) + __brewcomp "--verbose" + return + ;; + esac +} + +_brew_tests () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + case "$cur" in + --*) + __brewcomp "--verbose" + return + ;; + esac +} + +_brew_uninstall () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + case "$cur" in + --*) + __brewcomp "--force" + return + ;; + esac + __brew_complete_installed +} + +_brew_unpack () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + case "$cur" in + --*) + __brewcomp "--git --patch --destdir=" + return + ;; + esac + __brew_complete_formulae +} +_brew_update () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + case "$cur" in + --*) + __brewcomp "--rebase --verbose" + return + ;; + esac +} + +_brew_upgrade () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + local prv=$(__brewcomp_prev) + + case "$cur" in + --*) + __brewcomp " + --all + --build-from-source --build-bottle --force-bottle + --cleanup + --debug + --verbose + " + return + ;; + esac + __brew_complete_outdated +} + +_brew_uses () +{ + local cur="${COMP_WORDS[COMP_CWORD]}" + case "$cur" in + --*) + __brewcomp "--installed --recursive" + return + ;; + esac + __brew_complete_formulae +} + +_brew () +{ + 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 + # Do not auto-complete "instal" abbreviation for "install" command. + # Prefix newline to prevent not checking the first command. + local cmds=$'\n'"$(brew commands --quiet --include-aliases)" + __brewcomp "${cmds/$'\n'instal$'\n'/$'\n'}" + return + fi + + # subcommands have their own completion functions + case "$cmd" in + --cache|--cellar|--prefix) __brew_complete_formulae ;; + audit|cat|edit|home) __brew_complete_formulae ;; + test|unlink) __brew_complete_installed ;; + bottle) _brew_bottle ;; + cleanup) _brew_cleanup ;; + create) _brew_create ;; + deps) _brew_deps ;; + desc) _brew_desc ;; + doctor|dr) _brew_doctor ;; + diy|configure) _brew_diy ;; + fetch) _brew_fetch ;; + gist-logs) _brew_gist_logs ;; + info|abv) _brew_info ;; + install|instal|reinstall) _brew_install ;; + irb) _brew_irb ;; + link|ln) _brew_link ;; + linkapps|unlinkapps) _brew_linkapps ;; + list|ls) _brew_list ;; + log) _brew_log ;; + man) _brew_man ;; + missing) __brew_complete_formulae ;; + options) _brew_options ;; + outdated) _brew_outdated ;; + pin) __brew_complete_formulae ;; + postinstall) _brew_postinstall ;; + prune) _brew_prune ;; + pull) _brew_pull ;; + readall) _brew_readall ;; + search|-S) _brew_search ;; + style) _brew_style ;; + switch) _brew_switch ;; + tap) _brew_complete_tap ;; + tap-readme) _brew_tap_readme ;; + tap-unpin) _brew_tap_unpin ;; + tests) _brew_tests ;; + uninstall|remove|rm) _brew_uninstall ;; + unpack) _brew_unpack ;; + unpin) __brew_complete_formulae ;; + untap|tap-info|tap-pin) __brew_complete_tapped ;; + update) _brew_update ;; + upgrade) _brew_upgrade ;; + uses) _brew_uses ;; + *) ;; + esac +} + +# keep around for compatibility +_brew_to_completion () +{ + _brew +} + +complete -o bashdefault -o default -F _brew brew |
