blob: 4496f5bda2fd5d61b92a1803d8b3118c7daba4bb (
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
#autoload
# The main loop of the completion code. This is what is called when
# completion is attempted from the command line.
# If you want to complete only set or unset options for the unsetopt
# and setopt builtin, un-comment these lines:
#
# local _set_options _unset_options
#
# if zmodload -e parameter; then
# _set_options=(${(k)options[(R)on]})
# _unset_options=(${(k)options[(R)off]})
# else
# _set_options=("${(@f)$({ unsetopt kshoptionprint; setopt } 2>/dev/null)}")
# _unset_options=("${(@f)$({ unsetopt kshoptionprint; unsetopt } 2>/dev/null)}")
# fi
#
# This is needed because completion functions may set options locally
# which makes the output of setopt and unsetopt reflect a different
# state than the global one for which you are completing.
local comp ret=1 _compskip
typeset -U _lastdescr
setopt localoptions nullglob rcexpandparam
unsetopt markdirs globsubst shwordsplit nounset ksharrays
# Special completion contexts after `~' and `='.
if compset -P 1 '\='; then
compstate[context]=equal
elif [[ "$PREFIX" != */* && "$PREFIX[1]" = '~' ]]; then
compset -p 1
compstate[context]=tilde
fi
# Get the names of the completers to use in the positional parameters.
(( $# )) || set ${(s.:.)compconfig[completer]}
# And now just call the completer functions defined.
for comp; do
if "$comp"; then
ret=0
break;
fi
done
# Now call the post-functions.
for post in "$comppostfuncs[@]"; do
"$post"
done
comppostfuncs=()
_lastdescr=( "\`${(@)^_lastdescr:#}'" )
if [[ compstate[nmatches] -eq 0 &&
-n "$compconfig[warning_format]" && $#_lastdescr -ne 0 ]]; then
local str
compstate[list]=list
compstate[force_list]=yes
compstate[insert]=''
case $#_lastdescr in
1) str="$_lastdescr[1]";;
2) str="$_lastdescr[1] or $_lastdescr[2]";;
*) str="${(j:, :)_lastdescr[1,-2]}, or $_lastdescr[-1]";;
esac
compadd -UX "${compconfig[warning_format]//\\%d/$str}" -n ''
fi
[[ "$compconfig[last_prompt]" = always ]] && compstate[last_prompt]=yes
_lastcomp=( "${(@kv)compstate}" )
_lastcomp[completer]="$comp"
_lastcomp[prefix]="$PREFIX"
_lastcomp[suffix]="$SUFFIX"
_lastcomp[iprefix]="$IPREFIX"
_lastcomp[isuffix]="$ISUFFIX"
_lastcomp[qiprefix]="$QIPREFIX"
_lastcomp[qisuffix]="$QISUFFIX"
return ret
|