about summary refs log tree commit diff
path: root/Completion/Core/_list
blob: 099c6bc7b38a987a03fe01aa22425c3cfca05b2b (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
#autoload

# This completer function makes the other completer functions used
# insert possible completions only after once the list has been
# shown.
#
# Configuration keys:
#
#  list_condition
#    If this key is unset or set to the empty string, this completer
#    will delay the insertion of matches unconditionally. However,
#    if this value is set, it should be set to an expression usable
#    inside a $[...] arithmetical expression. In this case, delaying
#    will be done if the expression evaluates to `1'.
#    For example, with
#
#      compconf list_condition='NUMERIC != 1'
#
#    delaying will be done only if given an explicit numeric argument
#    other than `1'.
#
#  list_word
#    To find out if only listing should be done, the code normally
#    compares the contents of the line with the contents the line
#    had at the time of the last invocation. If this key is set to
#    an non-empty string comparison is done using only the current
#    word. So if it is set, attempting completion on a word equal
#    to the one completion was called on the last time will not
#    delay the generation of matches.

local pre suf

# Get the strings to compare.

if [[ -z "$compconfig[list_word]" ]]; then
  pre="$HISTNO$LBUFFER"
  suf="$RBUFFER"
else
  pre="$PREFIX"
  suf="$SUFFIX"
fi

# Should we only show a list now?

if [[ ( -z "$compconfig[list_condition]" ||
        "${(e):-\$[$compconfig[expand_glob]]}" -eq 1 ) &&
      ( "$pre" != "$_list_prefix" || "$suf" != "$_list_suffix" ) ]]; then

  # Yes. Tell the completion code about it and save the new values
  # to compare the next time.

  compstate[insert]=''
  compstate[list]=list
  compstate[force_list]=yes
  _list_prefix="$pre"
  _list_suffix="$suf"
fi

# We always return one, because we don't really do any work here.

return 1