mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-11-04 07:21:06 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			105 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			105 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
#autoload
 | 
						|
 | 
						|
local opts opt type=file glob group gopts dopts aopts tmp _file_pat_checked=yes
 | 
						|
local hasign ign
 | 
						|
 | 
						|
zparseopts -a opts \
 | 
						|
    '/=tmp' 'f=tmp' 'g+:-=tmp' q n 1 2 P: S: r: R: W: X: M+: F: \
 | 
						|
    '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
 | 
						|
 | 
						|
[[ "$group[2]" = files ]] && opts=("$opts[@]" "$group[@]") group=()
 | 
						|
 | 
						|
ign=()
 | 
						|
 | 
						|
zstyle -s ":completion:${curcontext}:all-files" file-patterns tmp &&
 | 
						|
    [[ -n "$tmp" ]] &&
 | 
						|
        aopts=(-g "$tmp")
 | 
						|
 | 
						|
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
 | 
						|
else
 | 
						|
  dopts=()
 | 
						|
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[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[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[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[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
 |