blob: 62e60a1cc1bff49fbf361a861ed8f5a254275fe6 (
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
|
#autoload
# The main loop of the completion code. This is what is called when
# completion is attempted from the command line.
#
# Configuration keys used:
#
# completer
# This should be set to the names of the functions to generate the
# matches separated by colons. E.g. with
#
# compconf completer=_complete:_correct:_approximate
#
# the code will first try normal completion. If that doesn't yield
# any matches, correction is tried and if that doesn't yield
# anything either, correcting completion is attempted.
#
# These completer functions are only used when this function is called
# without arguments. If arguments are given, they should be names of
# completer functions which will then be called.
# 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
#
# _set_options=("${(@f)$({ unsetopt kshoptionprint; setopt } 2>/dev/null)}")
# _unset_options=("${(@f)$({ unsetopt kshoptionprint; unsetopt } 2>/dev/null)}")
#
# This is needed because completion function 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
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
"$comp" && return
done
|