blob: 90b4a9735eff52d54b343baab3d0eca3fdd0b0d0 (
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
|
#autoload
local opt OPTARG matches end
local term=$'\0'
while getopts "t:" opt; do
case $opt in
(t)
term=$OPTARG
;;
(*)
return 1
;;
esac
done
shift $(( OPTIND - 1 ))
local tag=$1
local desc=$2
shift 2
if (( $# )); then
reply=(\()
else
# ### Is this likely to happen in callers? Should we warn?
reply=()
return
fi
integer i
local -a wds
if [[ $term = $'\0' ]]; then
matches=":${tag}:${desc}:(( "
end="))"
else
matches=":${tag}:${desc}:_values -s ${(q)term} ${(q)desc}"
fi
for (( i = 1; i <= $#; i++ )); do
wds=(${(s.:.)argv[i]})
reply+=(/${wds[1]//\**/"[^$term]#"}"$term"/)
if [[ $term = $'\0' ]]; then
matches+="${wds[1]//\*}${wds[2]:+\\:${wds[2]//(#m)[: \(\)]/\\$MATCH}} "
else
matches+=" ${(q)${${wds[1]//\*}//(#m)[:\[\]]/\\$MATCH}}\\[${(q)${wds[2]//(#m)[:\[\]]/\\$MATCH}}\\]"
fi
eval "reply+=($wds[3])"
reply+=(\|)
done
reply+=( /'[]'/ "${matches}${end}" \) )
|