blob: a6336424cf709358b5362d4dc455b573900fb95a (
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
|
#autoload
# This should be used to complete parameter names if you need some of the
# extra options of compadd. It completes only non-local parameters.
# If the first argument is `-s' or `-b' auto_param_slash will be tested
# and slashes will be added to parameters containing a directory. `-s' is
# for parameter expansions without braces and `-b' is for expansions with
# braces. A `-' as the first argument is ignored and in all cases all
# other arguments will be given to `compadd'.
setopt localoptions extendedglob
local pars expl slash suf
if [[ "$1" = -s ]]; then
slash=normal
suf="$2"
shift 2
elif [[ "$1" = -b ]]; then
slash=brace
suf="$2"
shift 2
elif [[ "$1" = - ]]; then
shift
fi
_description expl parameter
if zmodload -e parameter; then
setopt localoptions extendedglob
pars=( ${(k)parameters[(R)^*local*]} )
else
pars=( ${${${(f)"$(typeset +)"}:#*local *}##* } )
fi
if [[ -n "$slash" && -o autoparamslash ]]; then
local i dirs nodirs ret=1
dirs=()
nodirs=()
for i in $pars; do
if [[ -d "${(P)i}" ]]; then
dirs=( $dirs $i )
else
nodirs=( $nodirs $i )
fi
done
if [[ "$slash" = normal ]]; then
compadd -S "/${suf%% #}" -r ' [/:' "$expl[@]" "$@" - $dirs && ret=0
compadd -S "$suf" -r ' [:' "$expl[@]" "$@" - $nodirs && ret=0
elif [[ "$slash" = brace ]]; then
compadd -S "}/${suf%% #}" -r '-:?#%+=[/}' "$expl[@]" "$@" - $dirs && ret=0
compadd -S "}$suf" -r '-:?#%+=[/}' "$expl[@]" "$@" - $nodirs && ret=0
fi
return ret
else
if [[ "$slash" = normal ]]; then
compadd -S "$suf" -r ' [:' "$expl[@]" "$@" - $pars
elif [[ "$slash" = brace ]]; then
compadd -S "}$suf" -r '-:?#%+=[/}' "$expl[@]" "$@" - $pars
else
compadd "$expl[@]" "$@" - $pars
fi
fi
|