about summary refs log tree commit diff
path: root/Completion/Commands/_verbose_list
blob: b3d762ecc6e6a5301a88b7706b3037b4b2b61228 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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"