3 local state context ostate line expl ctop suf
4 local nm=$compstate[nmatches] taglist patterns pstyles
5 typeset -A opt_args styles
7 (( $+functions[_completers] )) ||
9 # option: -p - needs a `_' prefix
11 local -a disp list expl
13 list=( complete approximate correct match expand list menu oldlist
14 ignored prefix history )
15 zparseopts -D -K -E 'p=us'
16 [[ -n "$us" ]] && us='_'
17 zstyle -t ":completion:${curcontext}:completers" prefix-hidden &&
19 _wanted completers expl 'completer' \
20 compadd "$@" "$disp[@]" - "$us${^list[@]}"
23 # Assoc array of styles; the values give the possible top-level
28 # or any combination of the above,
29 # followed by a colon, followed by a state to enter, empty if none.
32 accept-exact-dirs c:bool
35 assign-list c:_parameters
37 avoid-completer c:completer
39 cache-path c:_directories
40 cache-policy c:_functions
51 fake-files c:fake-files
52 fake-parameters c:fake-params
54 file-patterns c:filepat
66 hosts-ports c:host-port
68 ignore-parents c:ignorepar
70 insert-ids c:insert-ids
72 insert-unambiguous c:insunambig
73 keep-prefix c:keep-prefix
77 list-dirs-first c:bool
81 list-rows-first c:bool
82 list-separator c:separator
85 mail-directory c:_directories
86 match-original c:match-orig
90 max-matches-width c:max-matches-width
95 old-matches c:oldmatches
98 packageset c:packageset
100 pager c:_command_names
101 pine-directory c:_directories
105 preserve-prefix c:preserve-prefix
109 remove-all-dups c:bool
112 separate-sections c:bool
113 single-ignored c:single-ignored
116 squeeze-slashes c:bool
119 strip-comments c:bool
120 subst-globs-only c:bool
123 tag-order c:tag-order
124 try-to-use-pminst c:bool
129 users-hosts c:user-host
130 users-hosts-ports c:user-host-port
152 word-style e:word-style
163 accounts all-expansions all-files arguments arrays association-keys
164 bookmarks builtins characters colormapids colors commands contexts
165 corrections cursors default descriptions devices directories
166 directory-stack displays expansions extensions files flags fstypes
167 fonts functions globbed-files groups history-words hosts indexes
168 interfaces jobs keymaps keysyms libraries limits local-directories
169 mailboxes manuals maps messages modifiers modules my-accounts
170 named-directories names newsgroups nicknames options original
171 other-accounts packages parameters path-directories paths pods ports
172 prefixes printers processes processes-names ps regex sequences
173 sessions signals strings styles tags targets timezones types urls
174 users values variant visuals warnings widgets windows zsh-options
175 email-address ${(k)functions[(I)_email-*]#_}
179 '(-)-L[output in form of zstyle commands]' \
180 '(: -)-d[delete style definitions]:context pattern:->patterns:*:styles:->pstyles' \
181 '(-)-e[value is evaluated when style is looked up]' \
182 ':context:->contexts' ':style:->styles' '*:argument:->style-arg'
184 while (( $#state )); do
187 if [[ ! -prefix :*: ]]; then
188 _wanted contexts expl context compadd -P : -S : completion zftp
189 elif compset -P :completion:; then
190 for ostate in functions _completers cmdorcont argument tag; do
191 compset -P '[^:]#:' || break
194 compset -S ':*' || suf=( -qS: )
195 [[ $ostate = tag ]] && suf=()
196 if compset -P '(|\\)\((*\||)'; then # handle (x|y) patterns
198 compset -S '(|\\)[)|]*' ||
199 suf=( -S "${${QIPREFIX:+|}:-\|}" -r "${${QIPREFIX:+|}:-\\\\} \t)" )
207 _wanted contexts expl 'context pattern' compadd -a patterns
211 zstyle -g pstyles ${(Q)${(M)opt_args[-d]#*[^\\]:}%:}
212 _wanted styles expl style compadd -a pstyles
216 # Get the top-level context we're completing for, if any.
234 _wanted styles expl style \
235 compadd -M 'r:|-=* r:|=*' -k "styles[(R)[^:]#[$ctop][^:]#:*]"
239 state+=( "${styles[$line[2]]#*:}" )
243 _message -e arguments argument
247 _wanted values expl boolean compadd true false
251 _wanted values expl boolean \
252 compadd true false auto select search search-backward interactive
256 _alternative -O suf \
257 'commands:command:_command ' \
258 'contexts:context:(-array-value- -brace-parameter- -command- -condition- -math- -parameter- -redirect- -subscript- -value-)'
262 _wanted values expl 'cursor positioning' compadd complete key default
266 _wanted values expl completer _completers -p
270 _wanted values expl 'how to sort files' \
271 compadd name size links time date modification access inode change reverse
275 _wanted control-function expl 'control function' \
276 compadd predict-on all-matches
280 _wanted comp-widget expl 'completion widget' \
281 compadd $suf - all-matches complete-debug complete-tag \
282 correct-word expand-word expand-alias-word history-words
286 if [[ $PREFIX != *[@:]* ]]; then
288 elif [[ $PREFIX = *[@:]*[[@:]* ]]; then
298 if [[ $PREFIX != *:* ]]; then
307 _wanted values expl 'when to list completions' \
308 compadd always never sometimes
312 _wanted values expl 'default package set' \
313 compadd available installed uninstalled
317 _wanted values expl 'progress meter style' \
318 compadd none bar percent
322 _wanted values expl 'whether to complete . or ..' \
323 compadd true false ..
327 _wanted values expl 'when to insert matches' \
328 compadd true false verbose
332 _wanted tags expl tag compadd $suf -a taglist
336 if compset -P '*:*:'; then
337 _message -e descriptions description
338 elif compset -P '*:'; then
339 _message -e labels 'tag label'
342 compset -S ':*' || suf=( -qS: )
343 _wanted values expl tag compadd $suf -a taglist
348 if compset -P '*:*:'; then
349 _message -e descriptions description
350 elif compset -P '*:'; then
353 _message -e patterns 'glob patterns'
358 if [[ $PREFIX = *[@:]* ]]; then
367 _wanted values expl 'which parents to ignore' \
368 compadd parent pwd .. directory
372 _wanted values expl 'how to handle a single ignored match' \
383 _wanted values expl 'when to insert process IDs' \
384 compadd - menu single longer
388 _message -e fakes 'prefix and names'
392 if compset -P '*:'; then
393 _wanted values expl 'parameter type' compadd scalar array integer
396 compset -S ':*' || suf='-qS:'
397 _wanted values expl 'fake parameter' _parameters $suf
402 _wanted values expl 'ignore strings on the line' compadd true false current current-shown other
406 _wanted values expl 'keep prefix' compadd true false changed
410 _wanted values expl "match without inserting \`*'" compadd only both
414 _wanted values expl 'use list of old matches' compadd true false only
418 _wanted values expl 'insert unambiguous string' compadd true false pattern
422 _message -e prefixes 'pattern matching prefix to keep'
426 _message -e separators 'separator string'
430 _message -e numbers 'maximum display width for matches'
434 _wanted values expl no compadd no false off 0
438 _wanted word-styles expl 'word style' compadd normal shell space
448 [[ $compstate[nmatches] != $nm ]]