mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-11-04 07:21:06 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			90 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
#compdef stat gstat zstat
 | 
						|
 | 
						|
# Notes:
 | 
						|
# - @todo It would be nice to complete the -c/-f format strings some day
 | 
						|
# - @todo It should be possible to complete NFS file handles on FreeBSD and
 | 
						|
#   Dragonfly by parsing the output of `lsof -N`, but it's not available by
 | 
						|
#   default — is there another way?
 | 
						|
 | 
						|
local expl variant ret=1
 | 
						|
local -a context line state state_descr args aopts=( -A '-*' )
 | 
						|
local -A opt_args
 | 
						|
 | 
						|
_pick_variant -r variant -b zsh gnu='Free Soft' $OSTYPE --version
 | 
						|
 | 
						|
case $variant in
 | 
						|
  zsh)
 | 
						|
    args=(
 | 
						|
      "(-H)-A[assign the results to array, don't print]:array variable:_parameters -g '*array*'"
 | 
						|
      - set1
 | 
						|
      +device +inode +mode +nlink +uid +gid +rdev
 | 
						|
      +size +atime +mtime +ctime +blksize +block +link
 | 
						|
      "(-A)-H[assign the results to associative array, don't print]:associative array variable:_parameters -g '*association*'"
 | 
						|
      '(:)-f[stat the specified file descriptor]:file descriptor:_file_descriptors'
 | 
						|
      '(-s)-F[specify strftime(3) format string]: :_date_formats zsh'
 | 
						|
      '(-s)-g[show times in GMT/UTC]'
 | 
						|
      # Note that this has the *opposite* effect of other variants' -L option!
 | 
						|
      "-L[don't dereference symbolic links; use lstat(2)]"
 | 
						|
      '(-N)-n[always show names of files]'
 | 
						|
      '(-n)-N[never show names of files]'
 | 
						|
      '-o[print file modes in octal rather than decimal]'
 | 
						|
      '-r[print raw data]'
 | 
						|
      '-s[print mode, UID, GID, and times as strings]'
 | 
						|
      '(-T)-t[always show type names]'
 | 
						|
      '(-t)-T[never show type names]'
 | 
						|
      '*: :_files'
 | 
						|
      - set2
 | 
						|
      '-l[list stat types]'
 | 
						|
    )
 | 
						|
    ;;
 | 
						|
  gnu)
 | 
						|
    aopts=( )
 | 
						|
    args=(
 | 
						|
      '*: :_files'
 | 
						|
      '(: * -)--help[display help information]'
 | 
						|
      '(: * -)--version[display version information]'
 | 
						|
      '(-L --dereference)'{-L,--dereference}'[dereference symbolic links]'
 | 
						|
      + '(d)' # Display options
 | 
						|
      {-c+,--format=}'[display per the specified format string]:format string'
 | 
						|
      {-f,--file-system}'[display file-system status instead of file status]'
 | 
						|
      '--printf=[display as with -c, but interpret backslash escapes like printf(3)]'
 | 
						|
      {-t,--terse}'[display in terse format]'
 | 
						|
    )
 | 
						|
    ;;
 | 
						|
  darwin*|dragonfly*|*bsd*)
 | 
						|
    args=(
 | 
						|
      '*: :->files-or-handles'
 | 
						|
      '(-H)-L[dereference symbolic links]'
 | 
						|
      '-q[suppress error messages about lstat(2)/stat(2) failure]'
 | 
						|
      + '(d)' # Primary display options
 | 
						|
      '(-F)-f+[display per the specified format string]:format string'
 | 
						|
      '-l[display in `ls -lT` format]'
 | 
						|
      '(-F -t)-r[display in raw (numerical) format]'
 | 
						|
      '(-F -t)-s[display in shell variable-assignment format]'
 | 
						|
      '(-F)-x[display in verbose (Linux-style) format]'
 | 
						|
      + D # Secondary display options
 | 
						|
      '(-f -r -s -x)-F[append file type indicators (implies -l)]'
 | 
						|
      '-n[suppress terminating newlines]'
 | 
						|
      '(-r -s)-t+[specify strftime(3) format string]: :_date_formats'
 | 
						|
    )
 | 
						|
    ;| # MATCH AGAIN
 | 
						|
  dragonfly*|freebsd*)
 | 
						|
    args+=(
 | 
						|
      + df
 | 
						|
      '(-L)-H[treat arguments as hexadecimal-formatted NFS file handles]'
 | 
						|
    )
 | 
						|
    ;;
 | 
						|
esac
 | 
						|
 | 
						|
(( $#args )) || args=( '*: :_files' )
 | 
						|
 | 
						|
_arguments -s -S $aopts : $args && ret=0
 | 
						|
 | 
						|
[[ $state == files-or-handles ]] &&
 | 
						|
if [[ -n ${opt_args[(i)*--H]} ]]; then
 | 
						|
  _message -e nfs-handles 'NFS file handle'
 | 
						|
else
 | 
						|
  _files && ret=0
 | 
						|
fi
 | 
						|
 | 
						|
return ret
 |