#!bash # Generated with perl module App::Spec v0.013 _go2() { COMPREPLY=() local program=go2 local cur prev words cword _init_completion -n : || return declare -a FLAGS declare -a OPTIONS declare -a MYWORDS local INDEX=`expr $cword - 1` MYWORDS=("${words[@]:1:$cword}") FLAGS=('--help' 'Show command help' '-h' 'Show command help') OPTIONS=('--config-file' 'load configuration from this file' '-C' 'load configuration from this file') __go2_handle_options_flags case $INDEX in 0) __comp_current_options || return __go2_dynamic_comp 'commands' 'connect'$'\t''connect to the hosts'$'\n''cp'$'\t''copy files from/to hosts'$'\n''cssh'$'\t''connect to the hosts via ClusterSSH'$'\n''help'$'\t''Show command help'$'\n''list'$'\t''list the hosts'$'\n''wipe-cache'$'\t''removes all cached machine information' ;; *) # subcmds case ${MYWORDS[0]} in _meta) __go2_handle_options_flags case $INDEX in 1) __comp_current_options || return __go2_dynamic_comp 'commands' 'completion'$'\t''Shell completion functions'$'\n''pod'$'\t''Pod documentation' ;; *) # subcmds case ${MYWORDS[1]} in completion) __go2_handle_options_flags case $INDEX in 2) __comp_current_options || return __go2_dynamic_comp 'commands' 'generate'$'\t''Generate self completion' ;; *) # subcmds case ${MYWORDS[2]} in generate) FLAGS+=('--zsh' 'for zsh' '--bash' 'for bash') OPTIONS+=('--name' 'name of the program (optional, override name in spec)') __go2_handle_options_flags case ${MYWORDS[$INDEX-1]} in --config-file|-C) ;; --name) ;; esac case $INDEX in *) __comp_current_options || return ;; esac ;; esac ;; esac ;; pod) __go2_handle_options_flags case $INDEX in 2) __comp_current_options || return __go2_dynamic_comp 'commands' 'generate'$'\t''Generate self pod' ;; *) # subcmds case ${MYWORDS[2]} in generate) __go2_handle_options_flags __comp_current_options true || return # no subcmds, no params/opts ;; esac ;; esac ;; esac ;; esac ;; connect) FLAGS+=('--all' 'SSH to every matching machine, one after the other, instead of the best match only' '-a' 'SSH to every matching machine, one after the other, instead of the best match only' '--verbose' 'verbose output' '-v' 'verbose output' '--external' 'access the machines from an external address, if you'"\\'"'re not in the office or on the VPN' '-e' 'access the machines from an external address, if you'"\\'"'re not in the office or on the VPN' '--dry-run' 'don'"\\'"'t run the ssh command, just print it' '-d' 'don'"\\'"'t run the ssh command, just print it') __go2_handle_options_flags case ${MYWORDS[$INDEX-1]} in --config-file|-C) ;; esac case $INDEX in 1) __comp_current_options || return _go2_connect_param_regex_completion ;; *) __comp_current_options || return ;; esac ;; cp) FLAGS+=('--all' 'SSH to every matching machine, one after the other, instead of the best match only' '-a' 'SSH to every matching machine, one after the other, instead of the best match only' '--verbose' 'verbose output' '-v' 'verbose output' '--external' 'access the machines from an external address, if you'"\\'"'re not in the office or on the VPN' '-e' 'access the machines from an external address, if you'"\\'"'re not in the office or on the VPN' '--dry-run' 'don'"\\'"'t run the ssh command, just print it' '-d' 'don'"\\'"'t run the ssh command, just print it' '--recursive' 'recursively copy entire directories' '-r' 'recursively copy entire directories') __go2_handle_options_flags case ${MYWORDS[$INDEX-1]} in --config-file|-C) ;; esac case $INDEX in 1) __comp_current_options || return _go2_cp_param_path_completion ;; *) __comp_current_options || return ;; esac ;; cssh) FLAGS+=('--all' 'SSH to every matching machine, one after the other, instead of the best match only' '-a' 'SSH to every matching machine, one after the other, instead of the best match only' '--verbose' 'verbose output' '-v' 'verbose output' '--external' 'access the machines from an external address, if you'"\\'"'re not in the office or on the VPN' '-e' 'access the machines from an external address, if you'"\\'"'re not in the office or on the VPN') __go2_handle_options_flags case ${MYWORDS[$INDEX-1]} in --config-file|-C) ;; esac case $INDEX in 1) __comp_current_options || return _go2_cssh_param_regex_completion ;; *) __comp_current_options || return ;; esac ;; help) FLAGS+=('--all' '') __go2_handle_options_flags case $INDEX in 1) __comp_current_options || return __go2_dynamic_comp 'commands' 'connect'$'\n''cp'$'\n''cssh'$'\n''list'$'\n''wipe-cache' ;; *) # subcmds case ${MYWORDS[1]} in _meta) __go2_handle_options_flags case $INDEX in 2) __comp_current_options || return __go2_dynamic_comp 'commands' 'completion'$'\n''pod' ;; *) # subcmds case ${MYWORDS[2]} in completion) __go2_handle_options_flags case $INDEX in 3) __comp_current_options || return __go2_dynamic_comp 'commands' 'generate' ;; *) # subcmds case ${MYWORDS[3]} in generate) __go2_handle_options_flags __comp_current_options true || return # no subcmds, no params/opts ;; esac ;; esac ;; pod) __go2_handle_options_flags case $INDEX in 3) __comp_current_options || return __go2_dynamic_comp 'commands' 'generate' ;; *) # subcmds case ${MYWORDS[3]} in generate) __go2_handle_options_flags __comp_current_options true || return # no subcmds, no params/opts ;; esac ;; esac ;; esac ;; esac ;; connect) __go2_handle_options_flags __comp_current_options true || return # no subcmds, no params/opts ;; cp) __go2_handle_options_flags __comp_current_options true || return # no subcmds, no params/opts ;; cssh) __go2_handle_options_flags __comp_current_options true || return # no subcmds, no params/opts ;; list) __go2_handle_options_flags __comp_current_options true || return # no subcmds, no params/opts ;; wipe-cache) __go2_handle_options_flags __comp_current_options true || return # no subcmds, no params/opts ;; esac ;; esac ;; list) FLAGS+=('--all' 'SSH to every matching machine, one after the other, instead of the best match only' '-a' 'SSH to every matching machine, one after the other, instead of the best match only' '--verbose' 'verbose output' '-v' 'verbose output' '--external' 'access the machines from an external address, if you'"\\'"'re not in the office or on the VPN' '-e' 'access the machines from an external address, if you'"\\'"'re not in the office or on the VPN') __go2_handle_options_flags case ${MYWORDS[$INDEX-1]} in --config-file|-C) ;; esac case $INDEX in 1) __comp_current_options || return _go2_list_param_regex_completion ;; *) __comp_current_options || return ;; esac ;; wipe-cache) __go2_handle_options_flags __comp_current_options true || return # no subcmds, no params/opts ;; esac ;; esac } _go2_compreply() { local prefix="" cur="$(printf '%q' "$cur")" IFS=$'\n' COMPREPLY=($(compgen -P "$prefix" -W "$*" -- "$cur")) __ltrim_colon_completions "$prefix$cur" # http://stackoverflow.com/questions/7267185/bash-autocompletion-add-description-for-possible-completions if [[ ${#COMPREPLY[*]} -eq 1 ]]; then # Only one completion COMPREPLY=( "${COMPREPLY[0]%% -- *}" ) # Remove ' -- ' and everything after COMPREPLY=( "${COMPREPLY[0]%%+( )}" ) # Remove trailing spaces fi } _go2_connect_param_regex_completion() { local __dynamic_completion __dynamic_completion=$(PERL5_APPSPECRUN_SHELL=bash PERL5_APPSPECRUN_COMPLETION_PARAMETER='regex' ${words[@]}) __go2_dynamic_comp 'regex' "$__dynamic_completion" } _go2_cp_param_path_completion() { local __dynamic_completion __dynamic_completion=$(PERL5_APPSPECRUN_SHELL=bash PERL5_APPSPECRUN_COMPLETION_PARAMETER='path' ${words[@]}) __go2_dynamic_comp 'path' "$__dynamic_completion" } _go2_cssh_param_regex_completion() { local __dynamic_completion __dynamic_completion=$(PERL5_APPSPECRUN_SHELL=bash PERL5_APPSPECRUN_COMPLETION_PARAMETER='regex' ${words[@]}) __go2_dynamic_comp 'regex' "$__dynamic_completion" } _go2_list_param_regex_completion() { local __dynamic_completion __dynamic_completion=$(PERL5_APPSPECRUN_SHELL=bash PERL5_APPSPECRUN_COMPLETION_PARAMETER='regex' ${words[@]}) __go2_dynamic_comp 'regex' "$__dynamic_completion" } __go2_dynamic_comp() { local argname="$1" local arg="$2" local name desc cols desclength formatted local comp=() local max=0 while read -r line; do name="$line" desc="$line" name="${name%$'\t'*}" if [[ "${#name}" -gt "$max" ]]; then max="${#name}" fi done <<< "$arg" while read -r line; do name="$line" desc="$line" name="${name%$'\t'*}" desc="${desc/*$'\t'}" if [[ -n "$desc" && "$desc" != "$name" ]]; then # TODO portable? cols=`tput cols` [[ -z $cols ]] && cols=80 desclength=`expr $cols - 4 - $max` formatted=`printf "%-*s -- %-*s" "$max" "$name" "$desclength" "$desc"` comp+=("$formatted") else comp+=("'$name'") fi done <<< "$arg" _go2_compreply ${comp[@]} } function __go2_handle_options() { local i j declare -a copy local last="${MYWORDS[$INDEX]}" local max=`expr ${#MYWORDS[@]} - 1` for ((i=0; i<$max; i++)) do local word="${MYWORDS[$i]}" local found= for ((j=0; j<${#OPTIONS[@]}; j+=2)) do local option="${OPTIONS[$j]}" if [[ "$word" == "$option" ]]; then found=1 i=`expr $i + 1` break fi done if [[ -n $found && $i -lt $max ]]; then INDEX=`expr $INDEX - 2` else copy+=("$word") fi done MYWORDS=("${copy[@]}" "$last") } function __go2_handle_flags() { local i j declare -a copy local last="${MYWORDS[$INDEX]}" local max=`expr ${#MYWORDS[@]} - 1` for ((i=0; i<$max; i++)) do local word="${MYWORDS[$i]}" local found= for ((j=0; j<${#FLAGS[@]}; j+=2)) do local flag="${FLAGS[$j]}" if [[ "$word" == "$flag" ]]; then found=1 break fi done if [[ -n $found ]]; then INDEX=`expr $INDEX - 1` else copy+=("$word") fi done MYWORDS=("${copy[@]}" "$last") } __go2_handle_options_flags() { __go2_handle_options __go2_handle_flags } __comp_current_options() { local always="$1" if [[ -n $always || ${MYWORDS[$INDEX]} =~ ^- ]]; then local options_spec='' local j= for ((j=0; j<${#FLAGS[@]}; j+=2)) do local name="${FLAGS[$j]}" local desc="${FLAGS[$j+1]}" options_spec+="$name"$'\t'"$desc"$'\n' done for ((j=0; j<${#OPTIONS[@]}; j+=2)) do local name="${OPTIONS[$j]}" local desc="${OPTIONS[$j+1]}" options_spec+="$name"$'\t'"$desc"$'\n' done __go2_dynamic_comp 'options' "$options_spec" return 1 else return 0 fi } complete -o default -F _go2 go2