summaryrefslogtreecommitdiff
path: root/completions/mr
diff options
context:
space:
mode:
Diffstat (limited to 'completions/mr')
-rw-r--r--completions/mr41
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