#autoload local opts opt type=file glob group gopts dopts aopts tmp _file_pat_checked=yes local hasign ign zparseopts \ /tmp ftmp g+tmp \ qopts nopts 1opts 2opts P:opts S:opts r:opts R:opts W:opts X:opts M:opts \ F:opts J:group V:group type="${(@j::M)${(@)tmp#-}#?}" [[ -n "$type" ]] || type=f if (( $tmp[(I)-g*] )); then gopts=( -g ${(j: :)${(M)tmp:#-g*}#-g} ) else gopts=() fi (( $opts[(I)-F*] )) && hasign=yes if [[ "$group[1]" = -?files ]]; then opts=("$opts[@]" "$group[@]") group=() fi if zstyle -s ":completion:${curcontext}:all-files" file-patterns tmp && [[ -n "$tmp" ]]; then aopts=(-g "$tmp") fi if zstyle -s ":completion:${curcontext}:directories" file-patterns tmp && [[ -n "$tmp" ]]; then dopts=(-g "$tmp") if [[ "$type" = (*/*g*|*g*/*) ]]; then type=g elif [[ "$type" != *[/g]* ]]; then type="${type}/" fi fi if zstyle -s ":completion:${curcontext}:globbed-files" file-patterns tmp && [[ -n "$tmp" ]]; then gopts=(-g "$tmp") if [[ "$type" != (*/*g*|*g*/*) ]]; then if [[ "$type" = *[g/]* ]]; then type=g else type=ga fi fi fi case "$type" in */*g*|*g*/*) _tags globbed-files all-files ;; *a*g*|*g*a*) _tags globbed-files all-files ;; *g*) _tags globbed-files directories all-files ;; */*) _tags directories all-files ;; *) _tags all-files ;; esac while _tags; do if _requested all-files; then if (( $#group )); then group[1]="${group[1][1,2]}all-files" _setup all-files [[ -z "$hasign" ]] && zstyle -a ":completion:${curcontext}:all-files" ignored-patterns _comp_ignore && ign=(-F _comp_ignore) fi _path_files "$opts[@]" "$ign[@]" "$aopts[@]" return elif _requested directories; then if _requested globbed-files; then if (( $#group )); then group[1]="${group[1][1,2]}globbed-files" _setup globbed-files [[ -z "$hasign" ]] && zstyle -a ":completion:${curcontext}:all-files" ignored-patterns _comp_ignore && ign=(-F _comp_ignore) fi _path_files "$opts[@]" "$ign[@]" "$dopts[@]" "$gopts[@]" && return 0 else if (( $#group )); then group[1]="${group[1][1,2]}directories" _setup directories [[ -z "$hasign" ]] && zstyle -a ":completion:${curcontext}:all-files" ignored-patterns _comp_ignore && ign=(-F _comp_ignore) fi _path_files "$opts[@]" "$ign[@]" "$dopts[@]" && return 0 fi elif _requested globbed-files; then if (( $#group )); then group[1]="${group[1][1,2]}globbed-files" _setup globbed-files [[ -z "$hasign" ]] && zstyle -a ":completion:${curcontext}:all-files" ignored-patterns _comp_ignore && ign=(-F _comp_ignore) fi if [[ "$type" = (*/*g*|*g*/*) ]]; then _path_files "$opts[@]" "$ign[@]" "$dopts[@]" "$gopts[@]" && return 0 else _path_files "$opts[@]" "$ign[@]" "$gopts[@]" && return 0 fi fi done return 1