summaryrefslogtreecommitdiff
path: root/completions/mr
diff options
context:
space:
mode:
Diffstat (limited to 'completions/mr')
-rw-r--r--completions/mr86
1 files changed, 86 insertions, 0 deletions
diff --git a/completions/mr b/completions/mr
new file mode 100644
index 00000000..9229e309
--- /dev/null
+++ b/completions/mr
@@ -0,0 +1,86 @@
+# 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="$(awk '/\[options\]/ { print $3 }' <<<"${help}")"
+ # 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=0; i < ${#words[@]}-1; i++ )); do
+ if [[ $commands == *"${words[i]}"* ]]; then
+ cmd="${words[i]}"
+ break
+ fi
+ done
+
+ # Complete options for specific commands.
+ if [[ -n $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
+ -c|--config)
+ _filedir
+ return
+ ;;
+ -d|--directory)
+ _filedir -d
+ return
+ ;;
+ esac
+
+ if [[ $cur == -* ]]; then
+ options="$(_parse_help - <<<"${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