blob: 48f2338dee87fb1683799fe04f98fd684070c3af (
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
|
#helper
# The main loop of the completion code. This is what is called when
# completion is attempted from the command line.
# The completion code gives us the special variables and the arguments
# from the command line are given as positional parameters.
local comp name
setopt localoptions nullglob rcexpandparam globdots
unsetopt markdirs globsubst shwordsplit nounset
# An entry for `--first--' is the replacement for `compctl -T'
# The `|| return 1' is used throughout: if a function producing matches
# returns non-zero this is interpreted as `do not try to produce more matches'
# (this is the replacement for `compctl -t').
comp="$comps[--first--]"
[[ -z "$comp" ]] || callcomplete comps --first-- "$@" || return 1
# For arguments we use the `__normal' function called via the convenience
# alias `compsub'.
if [[ $CONTEXT == argument || $CONTEXT == command ]]; then
compsub
else
# Let's see if we have a special completion definition for the other
# possible contexts.
comp=''
case $CONTEXT in
redirect) name=--redirect--;;
math) name=--math--;;
subscript) name=--subscript--;;
value) name=--value--;;
condition) name=--condition--;;
esac
# If not, we use default completion, if any.
comp="$comps[$name]"
if [[ -z "$comp" ]]; then
name=--default--
comp="$comps[--default--]"
fi
[[ -z "$comp" ]] || callcomplete comps "$name" "$@" || return 1
fi
|