# AUTOMATICALLY GENERATED by `shtab` _shtab_scratch_subparsers=('login' 'create' 'mine' 'ssh' 'sftp' 'destroy' 'push' 'completion' 'forward') _shtab_scratch_option_strings=('-h' '--help') _shtab_scratch_login_option_strings=('-h' '--help') _shtab_scratch_create_option_strings=('-h' '--help' '--key-name' '--security-group-name' '--extra-tags' '--instance-profile' '--output-format' '--git-rev' '--ssh' '--max-age-days') _shtab_scratch_mine_option_strings=('-h' '--help' '--all' '--output-format') _shtab_scratch_ssh_option_strings=('-h' '--help') _shtab_scratch_sftp_option_strings=('-h' '--help') _shtab_scratch_destroy_option_strings=('-h' '--help' '--all-mine' '-y' '--yes' '--output-format') _shtab_scratch_push_option_strings=('-h' '--help' '--rev') _shtab_scratch_completion_option_strings=('-h' '--help') _shtab_scratch_forward_option_strings=('-h' '--help') _shtab_scratch_pos_0_choices=('login' 'create' 'mine' 'ssh' 'sftp' 'destroy' 'push' 'completion' 'forward') _shtab_scratch_create___output_format_choices=('table' 'csv') _shtab_scratch_mine___output_format_choices=('table' 'csv') _shtab_scratch_destroy___output_format_choices=('table' 'csv') _shtab_scratch_completion_pos_0_choices=('bash' 'zsh' 'tcsh') _shtab_scratch_pos_0_nargs=A... _shtab_scratch__h_nargs=0 _shtab_scratch___help_nargs=0 _shtab_scratch_login__h_nargs=0 _shtab_scratch_login___help_nargs=0 _shtab_scratch_create__h_nargs=0 _shtab_scratch_create___help_nargs=0 _shtab_scratch_create___ssh_nargs=0 _shtab_scratch_mine_pos_0_nargs=* _shtab_scratch_mine__h_nargs=0 _shtab_scratch_mine___help_nargs=0 _shtab_scratch_mine___all_nargs=0 _shtab_scratch_ssh_pos_1_nargs=* _shtab_scratch_ssh__h_nargs=0 _shtab_scratch_ssh___help_nargs=0 _shtab_scratch_sftp__h_nargs=0 _shtab_scratch_sftp___help_nargs=0 _shtab_scratch_destroy_pos_0_nargs=* _shtab_scratch_destroy__h_nargs=0 _shtab_scratch_destroy___help_nargs=0 _shtab_scratch_destroy___all_mine_nargs=0 _shtab_scratch_destroy__y_nargs=0 _shtab_scratch_destroy___yes_nargs=0 _shtab_scratch_push__h_nargs=0 _shtab_scratch_push___help_nargs=0 _shtab_scratch_completion__h_nargs=0 _shtab_scratch_completion___help_nargs=0 _shtab_scratch_forward_pos_1_nargs=* _shtab_scratch_forward__h_nargs=0 _shtab_scratch_forward___help_nargs=0 # $1=COMP_WORDS[1] _shtab_compgen_files() { compgen -f -- $1 # files } # $1=COMP_WORDS[1] _shtab_compgen_dirs() { compgen -d -- $1 # recurse into subdirs } # $1=COMP_WORDS[1] _shtab_replace_nonword() { echo "${1//[^[:word:]]/_}" } # set default values (called for the initial parser & any subparsers) _set_parser_defaults() { local subparsers_var="${prefix}_subparsers[@]" sub_parsers=${!subparsers_var-} local current_option_strings_var="${prefix}_option_strings[@]" current_option_strings=${!current_option_strings_var} completed_positional_actions=0 _set_new_action "pos_${completed_positional_actions}" true } # $1=action identifier # $2=positional action (bool) # set all identifiers for an action's parameters _set_new_action() { current_action="${prefix}_$(_shtab_replace_nonword $1)" local current_action_compgen_var=${current_action}_COMPGEN current_action_compgen="${!current_action_compgen_var-}" local current_action_choices_var="${current_action}_choices[@]" current_action_choices="${!current_action_choices_var-}" local current_action_nargs_var="${current_action}_nargs" if [ -n "${!current_action_nargs_var-}" ]; then current_action_nargs="${!current_action_nargs_var}" else current_action_nargs=1 fi current_action_args_start_index=$(( $word_index + 1 - $pos_only )) current_action_is_positional=$2 } # Notes: # `COMPREPLY`: what will be rendered after completion is triggered # `completing_word`: currently typed word to generate completions for # `${!var}`: evaluates the content of `var` and expand its content as a variable # hello="world" # x="hello" # ${!x} -> ${hello} -> "world" _shtab_scratch() { local completing_word="${COMP_WORDS[COMP_CWORD]}" local previous_word="${COMP_WORDS[COMP_CWORD-1]}" local completed_positional_actions local current_action local current_action_args_start_index local current_action_choices local current_action_compgen local current_action_is_positional local current_action_nargs local current_option_strings local sub_parsers COMPREPLY=() local prefix=_shtab_scratch local word_index=0 local pos_only=0 # "--" delimeter not encountered yet _set_parser_defaults word_index=1 # determine what arguments are appropriate for the current state # of the arg parser while [ $word_index -ne $COMP_CWORD ]; do local this_word="${COMP_WORDS[$word_index]}" if [[ $pos_only = 1 || " $this_word " != " -- " ]]; then if [[ -n $sub_parsers && " ${sub_parsers[@]} " == *" ${this_word} "* ]]; then # valid subcommand: add it to the prefix & reset the current action prefix="${prefix}_$(_shtab_replace_nonword $this_word)" _set_parser_defaults fi if [[ " ${current_option_strings[@]} " == *" ${this_word} "* ]]; then # a new action should be acquired (due to recognised option string or # no more input expected from current action); # the next positional action can fill in here _set_new_action $this_word false fi if [[ "$current_action_nargs" != "*" ]] && \ [[ "$current_action_nargs" != "+" ]] && \ [[ "$current_action_nargs" != *"..." ]] && \ (( $word_index + 1 - $current_action_args_start_index - $pos_only >= \ $current_action_nargs )); then $current_action_is_positional && let "completed_positional_actions += 1" _set_new_action "pos_${completed_positional_actions}" true fi else pos_only=1 # "--" delimeter encountered fi let "word_index+=1" done # Generate the completions if [[ $pos_only = 0 && "${completing_word}" == -* ]]; then # optional argument started: use option strings COMPREPLY=( $(compgen -W "${current_option_strings[*]}" -- "${completing_word}") ) elif [[ "${previous_word}" == ">" || "${previous_word}" == ">>" || "${previous_word}" =~ ^[12]">" || "${previous_word}" =~ ^[12]">>" ]]; then # handle redirection operators COMPREPLY=( $(compgen -f -- "${completing_word}") ) else # use choices & compgen local IFS=$'\n' # items may contain spaces, so delimit using newline COMPREPLY=( $([ -n "${current_action_compgen}" ] \ && "${current_action_compgen}" "${completing_word}") ) unset IFS COMPREPLY+=( $(compgen -W "${current_action_choices[*]}" -- "${completing_word}") ) fi return 0 } complete -o filenames -F _shtab_scratch scratch