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