diff options
Diffstat (limited to 'completions/mr')
-rw-r--r-- | completions/mr | 86 |
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 |