mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-10-31 18:10:56 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			127 lines
		
	
	
	
		
			5 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			127 lines
		
	
	
	
		
			5 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| #compdef lsof
 | |
| 
 | |
| local curcontext="$curcontext" ret=1
 | |
| local -a state line expl args vals fields alts suf hsuf pref
 | |
| 
 | |
| case $OSTYPE in
 | |
|   linux*)
 | |
|     args=(
 | |
|       '-E[display endpoint info for pipes, sockets and pseudoterminal files but not files of the endpoints]'
 | |
|       '+E[display endpoint info for pipes, sockets and pseudoterminal files including files of the endpoints]'
 | |
|       '-X[skip reporting of info on network connections]'
 | |
|     )
 | |
|   ;;
 | |
|   solaris*)
 | |
|     args=(
 | |
|       '-X[include deleted files]'
 | |
|       '-z[zone information]::zone:_zones'
 | |
|     )
 | |
|   ;;
 | |
| esac
 | |
| 
 | |
| _arguments -C -s -S $args \
 | |
|   '(-)'{-\?,-h}'[list help]' \
 | |
|   '-a[AND selections]' \
 | |
|   '-b[avoid kernel blocks]' \
 | |
|   '-C[disable reporting of path name components]' \
 | |
|   '+c[truncate command name to specified characters]:characters' \
 | |
|   '-c[list files with specified command name beginning]:command name' \
 | |
|   '+d[search for open instances for contents of specified dir]:search directory:_files -/' \
 | |
|   '-d[specify list of file descriptors to exclude/include]:file descriptors:->filedes' \
 | |
|   '+D[recursively search from specified dir]:search directory:_files -/' \
 | |
|   '-D[direct use of device cache file]:function:((\?\:report\ device\ cache\ file\ paths b\:build\ the\ device\ cache\ file i\:ignore\ the\ device\ cache\ file r\:read\ the\ device\ cache\ file u\:read\ and\ update\ the\ device\ cache\ file))' \
 | |
|   '*-+e[exempt filesystem from blocking kernel calls]:file system:_directories' \
 | |
|   '-f[inhibit listing of kernel file structure info]::info type:->file-structures' \
 | |
|   '+f[enable listing of kernel file structure info]::info type:->file-structures' \
 | |
|   '-F[select output fields]:fields:->fields' \
 | |
|   '-g[select by process group id]::process group id:_sequence -s , _pgids' \
 | |
|   '(*)*-i[select internet files]::address:->addresses' \
 | |
|   '-K+[select listing of tasks of processes]::value:((i\:ignore\ tasks))' \
 | |
|   '-k[specify kernel name list file]:kernel file:_files' \
 | |
|   '-l[inhibit conversion of UIDs to user names]' \
 | |
|   '-L[list no link counts]' \
 | |
|   '+L[list all link counts]::max link count for listed files' \
 | |
|   '-m[specify kernel memory file]:kernel memory file:_files' \
 | |
|   '-M[disable reporting of portmapper registrations]' \
 | |
|   '+M[enable reporting of portmapper registrations]' \
 | |
|   '-n[inhibit conversion of network numbers to hostnames]' \
 | |
|   '-N[select listing of NFS files]' \
 | |
|   '(-s)-o[list file offset]::digits for file offset' \
 | |
|   '-O[avoid overheads of bypassing potential blocking]' \
 | |
|   '-P[inhibit conversion of port numbers to port names]' \
 | |
|   '-p[list files for specified processes]:process ID:_sequence -s , _pids' \
 | |
|   '-r[repeat listing endlessly]::delay (seconds)' \
 | |
|   '+r[repeat listing until no files listed]::delay (seconds)' \
 | |
|   '-R[list parent PID]' \
 | |
|   '(-o)-s+[list file size or exclude TCP/UDP files by state]::state:->states' \
 | |
|   '-S[specify timeout for kernel functions that might deadlock]:timeout (seconds)' \
 | |
|   '-T[select reporting of TCP/TPI info]::info type:((q\:queue\ length\ reporting s\:state\ reporting w\:window\ size\ reporting))' \
 | |
|   '(+w -w)-t[terse output]' \
 | |
|   '-u[list files owned by specified users]:user:_users -S,' \
 | |
|   '-U[list Unix domain socket files]' \
 | |
|   '(-)-v[list version info]' \
 | |
|   '-V[indicate unsuccessfully searched for items]' \
 | |
|   '(-t)+w[suppress warnings]' \
 | |
|   '(-t)-w[enable warnings]' \
 | |
|   '-x[cross filesystems/traverse symlinks with +d/+D]::type:((f\:filesystems s\:symlinks))' \
 | |
|   '*:file:_files' && ret=0
 | |
| 
 | |
| case $state in
 | |
|   addresses)
 | |
|     if compset -P 1 '*:'; then
 | |
|       _ports && ret=0
 | |
|     else
 | |
|       if compset -P 1 '*@'; then
 | |
|         pref=()
 | |
|       else
 | |
|         pref=( -P @ )
 | |
|         suf=( -qS @ )
 | |
|         [[ $PREFIX = (#i)(4|6|tcp|udp)* ]] || alts=( 'ip-versions:IP version:(4 6)' )
 | |
|         compset -P '[46]'
 | |
|         alts+=( 'protocols:protocol:compadd $suf -M 'm:{a-z}={A-Z}' TCP UDP' )
 | |
|       fi
 | |
|       if compset -S '@*'; then
 | |
|         suf=()
 | |
|       else
 | |
|         hsuf=( -qS : )
 | |
|         compset -S ':*' && hsuf=()
 | |
|         alts+=( "hosts:host:_hosts $pref $hsuf" )
 | |
|       fi
 | |
| 
 | |
|       _alternative $alts && ret=0
 | |
|     fi
 | |
|   ;;
 | |
|   fields)
 | |
|     fields=( ${${${${(f)"$($words[1] -F \? 2>&1)"}[2,-1]#??}//  ##/:}:#(#s)[${PREFIX:-:}]:*} )
 | |
|     compset -P '*'
 | |
|     _describe -t fields "field" fields -S '' && ret=0
 | |
|   ;;
 | |
|   filedes)
 | |
|     _sequence -s , _wanted -x file-descriptors expl "file descriptor" compadd - \
 | |
|         cwd err jld ltz mem mmap pd rtd tr txt v86 && ret=0
 | |
|   ;;
 | |
|   file-structures)
 | |
|     vals=(
 | |
|       'g[file flag abbreviations]'
 | |
|       'G[file flags in hexadecimal]'
 | |
|     )
 | |
|     [[ $OSTYPE != linux* ]] && vals+=(
 | |
|       'c[file structure use count]'
 | |
|       'f[file structure address]'
 | |
|       'n[file structure node address]'
 | |
|     )
 | |
|     _values 'kernel file structures' $vals && ret=0
 | |
|   ;;
 | |
|   states)
 | |
|     if compset -P 1 '*:'; then
 | |
|       _sequence _wanted states expl state compadd - -M 'm:{a-z}={A-Z}' \
 | |
|           CLOSED IDLE BOUND LISTEN ESTABLISHED SYN_SENT SYN_RCDV ESTABLISHED \
 | |
|           CLOSE_WAIT FIN_WAIT1 CLOSING LAST_ACK FIN_WAIT_2 TIME_WAIT && ret=0
 | |
|     else
 | |
|       compset -S ':*' || suf=( -qS : )
 | |
|       _wanted protocols expl protocol compadd $suf -M 'm:{a-z}={A-Z}' TCP UDP && ret=0
 | |
|     fi
 | |
|   ;;
 | |
| esac
 | |
| 
 | |
| return ret
 |