178 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			178 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| <%
 | |
| # To make changes to the completions:
 | |
| #
 | |
| # - For changes to a command under `COMMANDS` or `DEVELOPER COMMANDS` sections):
 | |
| #   - Find the source file in `Library/Homebrew/[dev-]cmd/<command>.{rb,sh}`.
 | |
| #   - For `.rb` files, edit the `<command>_args` method.
 | |
| #   - For `.sh` files, edit the top comment, being sure to use the line prefix
 | |
| #     `#:` for the comments to be recognized as documentation. If in doubt,
 | |
| #     compare with already documented commands.
 | |
| # - For other changes: Edit this file.
 | |
| #
 | |
| # When done, regenerate the completions by running `brew man`.
 | |
| %>
 | |
| # 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++ ))
 | |
|   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-- ))
 | |
|     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"
 | |
|   while read -r line; do COMPREPLY+=("$line"); done < <(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 formulae
 | |
|   formulae="$(brew formulae)"
 | |
|   while read -r line; do COMPREPLY+=("$line"); done < <(compgen -W "$formulae" -- "$cur")
 | |
| }
 | |
| 
 | |
| __brew_complete_casks() {
 | |
|   local cur="${COMP_WORDS[COMP_CWORD]}"
 | |
|   local casks
 | |
|   casks="$(brew casks)"
 | |
|   while read -r line; do COMPREPLY+=("$line"); done < <(compgen -W "$casks" -- "$cur")
 | |
| }
 | |
| 
 | |
| __brew_complete_installed_formulae() {
 | |
|   local cur="${COMP_WORDS[COMP_CWORD]}"
 | |
|   local installed_formulae
 | |
|   installed_formulae="$(command ls "$(brew --cellar)" 2>/dev/null)"
 | |
|   while read -r line; do COMPREPLY+=("$line"); done < <(compgen -W "$installed_formulae" -- "$cur")
 | |
| }
 | |
| 
 | |
| __brew_complete_installed_casks() {
 | |
|   local cur="${COMP_WORDS[COMP_CWORD]}"
 | |
|   local installed_casks
 | |
|   installed_casks="$(command ls "$(brew --caskroom)" 2>/dev/null)"
 | |
|   while read -r line; do COMPREPLY+=("$line"); done < <(compgen -W "$installed_casks" -- "$cur")
 | |
| }
 | |
| 
 | |
| __brew_complete_outdated_formulae() {
 | |
|   local cur="${COMP_WORDS[COMP_CWORD]}"
 | |
|   local outdated_formulae
 | |
|   outdated_formulae="$(brew outdated --formula --quiet)"
 | |
|   while read -r line; do COMPREPLY+=("$line"); done < <(compgen -W "$outdated_formulae" -- "$cur")
 | |
| }
 | |
| 
 | |
| __brew_complete_outdated_casks() {
 | |
|   local cur="${COMP_WORDS[COMP_CWORD]}"
 | |
|   local outdated_casks
 | |
|   outdated_casks="$(brew outdated --cask --quiet)"
 | |
|   while read -r line; do COMPREPLY+=("$line"); done < <(compgen -W "$outdated_casks" -- "$cur")
 | |
| }
 | |
| 
 | |
| __brew_complete_tapped() {
 | |
|   local dir taps taplib
 | |
|   taplib="$(brew --repository)/Library/Taps"
 | |
| 
 | |
|   for dir in "$taplib"/*/*
 | |
|   do
 | |
|     [[ -d "$dir" ]] || continue
 | |
|     dir="${dir#${taplib}/}"
 | |
|     dir="${dir/homebrew-/}"
 | |
|     taps="$taps $dir"
 | |
|   done
 | |
|   __brewcomp "$taps"
 | |
| }
 | |
| 
 | |
| __brew_complete_commands() {
 | |
|   local cur="${COMP_WORDS[COMP_CWORD]}"
 | |
|   local cmds
 | |
|   HOMEBREW_CACHE=$(brew --cache)
 | |
|   HOMEBREW_REPOSITORY=$(brew --repo)
 | |
|   # Do not auto-complete "*instal" or "*uninstal" aliases for "*install" commands.
 | |
|   if [[ -f "$HOMEBREW_CACHE/all_commands_list.txt" ]]
 | |
|   then
 | |
|     cmds="$(< "$HOMEBREW_CACHE/all_commands_list.txt" \grep -v instal$)"
 | |
|   else
 | |
|     cmds="$(< "$HOMEBREW_REPOSITORY/completions/internal_commands_list.txt" \grep -v instal$)"
 | |
|   fi
 | |
|   while read -r line; do COMPREPLY+=("$line"); done < <(compgen -W "$cmds" -- "$cur")
 | |
| }
 | |
| 
 | |
| # compopt is only available in newer versions of bash
 | |
| __brew_complete_files() {
 | |
|   command -v compopt &> /dev/null && compopt -o default
 | |
| }
 | |
| 
 | |
| <%= completion_functions.join("\n") %>
 | |
| 
 | |
| _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++ ))
 | |
|   done
 | |
| 
 | |
|   if [[ "$i" -eq "$COMP_CWORD" ]]
 | |
|   then
 | |
|     __brew_complete_commands
 | |
|     return
 | |
|   fi
 | |
| 
 | |
|   # subcommands have their own completion functions
 | |
|   case "$cmd" in
 | |
|     <%= function_mappings.join("\n    ").concat("\n") %>
 | |
|     *) ;;
 | |
|   esac
 | |
| }
 | |
| 
 | |
| # keep around for compatibility
 | |
| _brew_to_completion() {
 | |
|   _brew
 | |
| }
 | |
| 
 | |
| complete -o bashdefault -o default -F _brew brew
 | 
