diff options
Diffstat (limited to 'Completion/Commands')
-rw-r--r-- | Completion/Commands/_verbose_list | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/Completion/Commands/_verbose_list b/Completion/Commands/_verbose_list new file mode 100644 index 000000000..b3d762ecc --- /dev/null +++ b/Completion/Commands/_verbose_list @@ -0,0 +1,75 @@ +#compdef -k delete-char-or-list \C-xv + +# You probably want to bind this to Control-D. + +local odf="$compconfig[description_format]" +local omf="$compconfig[message_format]" +local ogm="$compconfig[group_matches]" +local oop="$compconfig[option_prefix]" +local odo="$compconfig[describe_options]" +local odv="$compconfig[describe_values]" +local what nm + +(( $# )) || set -- ${(s.:.)compconfig[verboselist_stages]} + +if [[ "$BUFFER" != "$_vl_buffer" || "$*" != "$_vl_config" ]]; then + _vl_buffer="$BUFFER" + _vl_config="$*" + _vl_array=( "$@" ) + _vl_index=1 + if (( ! $#_vl_array )); then + [[ -n "$compconfig[option_prefix]" ]] && _vl_array=(options) + [[ -z "$compconfig[describe_options]" || + -z "$compconfig[describe_options]" ]] && + _vl_array=( "$_vl_array[@]" options-describe ) + + _vl_array=( "$_vl_array[@]" normal ) + fi + if [[ -z "$compstate[old_list]" ]]; then + if (( $_vl_array[(I)normal] )); then + _vl_index="$_vl_array[(I)normal]" + else + _vl_array=( normal "$_vl_array[@]" ) + fi + fi +fi + +# If we had a possibility to say `ignore all matches added up to now', +# we could de-comment these thigs and wouldn't have the problem that +# if the options were already the stage `options' is a somewhat +# irritating no-op. +# Or maybe we make the completion functions report if they added +# options/description one day. + +# while true; do + what="$_vl_array[_vl_index++]" + [[ _vl_index -gt $#_vl_array ]] && _vl_index=1 + + if [[ "$what" != normal ]]; then + [[ -z "$odf" ]] && compconfig[description_format]='---- %d' + [[ -z "$omf" ]] && compconfig[message_format]='---- %d' + [[ -z "$ogm" ]] && compconfig[group_matches]=yes + [[ "$what" = *options* ]] && compconfig[option_prefix]='' + if [[ "$what" = *describe* ]]; then + compconfig[describe_options]=yes + compconfig[describe_values]=yes + fi + fi + + if [[ -n "$compstate[old_list]" ]]; then + nm="$_lastcomp[nmatches]" + else + nm=-1 + fi + + _main_complete + +# [[ "$what" != options || compstate[nmatches] -ne nm ]] && break +# done + +compconfig[description_format]="$odf" +compconfig[message_format]="$omf" +compconfig[group_matches]="$ogm" +compconfig[option_prefix]="$oop" +compconfig[describe_options]="$odo" +compconfig[describe_values]="$odv" |