blob: 1755abebd097d82b950ad945d8b86059deee3532 (
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
|
#autoload
local opts tmp glob pats expl tag i pat descr minus
zparseopts -a opts \
'/=tmp' 'f=tmp' 'g+:-=tmp' q n 1 2 P: S: r: R: W: X+: M+: F: J+: V+:
type="${(@j::M)${(@)tmp#-}#?}"
(( $tmp[(I)-g*] )) && glob="${(j: :)${(M)tmp:#-g*}#-g}"
if zstyle -a ":completion:${curcontext}:" file-patterns pats; then
[[ "$type" = */* ]] && glob="$glob *(-/)"
pats=( \ ${(M)^${pats//\\%p/ ${glob:-\*} }:#*[^\\]:*} )
else
if [[ "$type" = *g* ]]; then
if [[ "$type" = */* ]]; then
pats=( " ${glob//:/\\:} *(-/):globbed-files" '*:all-files' )
else
pats=( " ${glob//:/\\:}:globbed-files"
'*(-/):directories' '*:all-files' )
fi
elif [[ "$type" = */* ]]; then
pats=( '*(-/):directories' '*:all-files' )
else
pats=( '*:all-files' )
fi
fi
for tag in "${(@)${(@)pats#*[^\\]:}%%:*}"; do
i="$pats[(I)*[^\\\\]:${tag}(|:*)]"
pat="${${pats[i]%%:${tag}*}//\\\\:/:}"
if [[ i -gt 0 && "$pat" != \ # ]]; then
if [[ "$pats[i]" = *:${tag}:* ]]; then
descr="${pats[i]#*:${tag}:}"
minus=()
else
descr=file
minus=(-)
fi
fi
_wanted "$tag" expl "$descr" \
_path_files -g "$pat" "$opts[@]" "$minus[@]" && return 0
done
return 1
|