feat: Add Bash completion for Homebrew aliases

Add Bash completion support for Homebrew aliases:
https://github.com/Homebrew/homebrew-aliases

Unfortunately I'm not familiar enough neither with Ruby, nor with Fish/Zsh 🤷🏻

Fixes https://github.com/Homebrew/homebrew-aliases/issues/91
This commit is contained in:
George L. Yermulnik 2024-11-19 19:07:08 +02:00 committed by Eric Knibbe
parent 4f03c10fa3
commit 75b37366d3

View File

@ -111,6 +111,7 @@ __brew_complete_commands() {
local cur="${COMP_WORDS[COMP_CWORD]}" local cur="${COMP_WORDS[COMP_CWORD]}"
local cmds local cmds
local -a cmd_aliases
if [[ -n ${__HOMEBREW_COMMANDS} ]] if [[ -n ${__HOMEBREW_COMMANDS} ]]
then then
@ -122,6 +123,8 @@ __brew_complete_commands() {
then then
cmds="$(< "${HOMEBREW_REPOSITORY}/completions/internal_commands_list.txt")" cmds="$(< "${HOMEBREW_REPOSITORY}/completions/internal_commands_list.txt")"
fi fi
while read -r alias; do cmd_aliases+=("${alias}"); done < <(compgen -W "$(__brew_list_aliases)")
[[ -n ${cmd_aliases[*]+"${cmd_aliases[*]}"} ]] && cmds+=" ${cmd_aliases[*]} alias unalias"
while read -r line; do COMPREPLY+=("${line}"); done < <(compgen -W "${cmds}" -- "${cur}") while read -r line; do COMPREPLY+=("${line}"); done < <(compgen -W "${cmds}" -- "${cur}")
export __HOMEBREW_COMMANDS=${cmds} export __HOMEBREW_COMMANDS=${cmds}
} }
@ -131,6 +134,26 @@ __brew_complete_files() {
command -v compopt &> /dev/null && compopt -o default command -v compopt &> /dev/null && compopt -o default
} }
# https://github.com/Homebrew/homebrew-aliases
__brew_list_aliases() {
local aliases_dir="${HOME}/.brew-aliases"
local pattern="^# alias: brew ([[:alnum:]-]+)$"
local -a aliases
[[ ! -d ${aliases_dir} ]] && return
for file in "${aliases_dir}"/*; do
[[ ! -f ${file} ]] && continue
while read -r line; do
if [[ ${line} =~ ${pattern} ]]; then
aliases+=("${BASH_REMATCH[1]}")
break
fi
done < "${file}"
done
[[ -n ${aliases[*]+"${aliases[*]}"} ]] && echo "${aliases[@]}"
}
<%= completion_functions.join("\n") %> <%= completion_functions.join("\n") %>
_brew() { _brew() {