diff options
Diffstat (limited to 'completions/mr')
-rw-r--r-- | completions/mr | 41 |
1 files changed, 23 insertions, 18 deletions
diff --git a/completions/mr b/completions/mr index 15f634a3..930e3c96 100644 --- a/completions/mr +++ b/completions/mr @@ -1,6 +1,7 @@ # mr completion -*- shell-script -*- -_mr() { +_mr() +{ local cur prev words cword _init_completion || return @@ -8,7 +9,11 @@ _mr() { help="$(PERLDOC_PAGER=cat PERLDOC=-otext "${1}" help 2>/dev/null)" - commands="$(awk '/\[options\]/ { print $3 }' <<<"${help}")" + commands="$( + printf %s "$help" | while read -r _ options cmd _; do + [[ $options != "[options]" ]] || printf "%s\n" "$cmd" + done + )" # Split [online|offline] and remove `action` placeholder. commands="${commands//@(action|[\[\|\]])/$'\n'}" # Add standard aliases. @@ -17,7 +22,7 @@ _mr() { # Determine if user has entered an `mr` command. Used to block top-level # (option and command) completions. local cmd i - for (( i=0; i < ${#words[@]}-1; i++ )); do + for ((i = 1; i < ${#words[@]} - 1; i++)); do if [[ $commands == *"${words[i]}"* ]]; then cmd="${words[i]}" break @@ -25,30 +30,30 @@ _mr() { done # Complete options for specific commands. - if [[ -n $cmd ]]; then + if [[ -v cmd ]]; then case $cmd in bootstrap) _filedir # Also complete stdin (-) as a potential bootstrap source. - if [[ -z "${cur}" || $cur == - ]] && [[ $prev != - ]]; then - COMPREPLY+=( - ) + if [[ -z ${cur} || $cur == - ]] && [[ $prev != - ]]; then + COMPREPLY+=(-) fi return ;; clean) - if [[ "${cur}" == -* ]]; then - COMPREPLY=( $(compgen -W '-f' -- "${cur}") ) + if [[ ${cur} == -* ]]; then + COMPREPLY=($(compgen -W '-f' -- "${cur}")) fi return ;; - commit|ci|record) - if [[ "${cur}" == -* ]]; then - COMPREPLY=( $(compgen -W '-m' -- "${cur}") ) + commit | ci | record) + if [[ ${cur} == -* ]]; then + COMPREPLY=($(compgen -W '-m' -- "${cur}")) fi return ;; run) - COMPREPLY=( $(compgen -c -- "${cur}") ) + COMPREPLY=($(compgen -c -- "${cur}")) return ;; *) @@ -60,27 +65,27 @@ _mr() { # Complete top-level options and commands. case $prev in - --config|-!(-*)c) + --config | -!(-*)c) _filedir return ;; - --directory|-!(-*)d) + --directory | -!(-*)d) _filedir -d return ;; esac if [[ $cur == -* ]]; then - options="$(_parse_help - <<<"${help}")" + options="$(printf '%s\n' "$help" | _parse_help -)" # Remove short options (all have compatible long options). options="${options//-[a-z]$'\n'/}" # Remove deprecated options. options="${options//--path/}" - COMPREPLY=( $(compgen -W "${options}" -- "${cur}") ) + COMPREPLY=($(compgen -W "${options}" -- "${cur}")) else - COMPREPLY=( $(compgen -W "${commands}" -- "${cur}") ) + COMPREPLY=($(compgen -W "${commands}" -- "${cur}")) fi } && -complete -F _mr mr + complete -F _mr mr # ex: filetype=sh |