summaryrefslogtreecommitdiffstats
path: root/completions/mr
diff options
context:
space:
mode:
Diffstat (limited to 'completions/mr')
-rw-r--r--completions/mr91
1 files changed, 91 insertions, 0 deletions
diff --git a/completions/mr b/completions/mr
new file mode 100644
index 0000000..930e3c9
--- /dev/null
+++ b/completions/mr
@@ -0,0 +1,91 @@
+# mr completion -*- shell-script -*-
+
+_mr()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local help commands options
+
+ help="$(PERLDOC_PAGER=cat PERLDOC=-otext "${1}" help 2>/dev/null)"
+
+ 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.
+ commands="${commands} ci co ls"
+
+ # Determine if user has entered an `mr` command. Used to block top-level
+ # (option and command) completions.
+ local cmd i
+ for ((i = 1; i < ${#words[@]} - 1; i++)); do
+ if [[ $commands == *"${words[i]}"* ]]; then
+ cmd="${words[i]}"
+ break
+ fi
+ done
+
+ # Complete options for specific commands.
+ if [[ -v cmd ]]; then
+ case $cmd in
+ bootstrap)
+ _filedir
+ # Also complete stdin (-) as a potential bootstrap source.
+ if [[ -z ${cur} || $cur == - ]] && [[ $prev != - ]]; then
+ COMPREPLY+=(-)
+ fi
+ return
+ ;;
+ clean)
+ if [[ ${cur} == -* ]]; then
+ COMPREPLY=($(compgen -W '-f' -- "${cur}"))
+ fi
+ return
+ ;;
+ commit | ci | record)
+ if [[ ${cur} == -* ]]; then
+ COMPREPLY=($(compgen -W '-m' -- "${cur}"))
+ fi
+ return
+ ;;
+ run)
+ COMPREPLY=($(compgen -c -- "${cur}"))
+ return
+ ;;
+ *)
+ # Do not complete any other command.
+ return
+ ;;
+ esac
+ fi
+
+ # Complete top-level options and commands.
+ case $prev in
+ --config | -!(-*)c)
+ _filedir
+ return
+ ;;
+ --directory | -!(-*)d)
+ _filedir -d
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ 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}"))
+ else
+ COMPREPLY=($(compgen -W "${commands}" -- "${cur}"))
+ fi
+} &&
+ complete -F _mr mr
+
+# ex: filetype=sh