mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-11-04 07:21:06 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			112 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			112 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
#compdef pgrep pkill 
 | 
						|
 | 
						|
local context state line
 | 
						|
typeset -A opt_args
 | 
						|
typeset -a arguments
 | 
						|
 | 
						|
arguments=('-P[parent process id]:parent process id:->ppid' 
 | 
						|
	   '-g[match only in process group ids]:group:->pgid' 
 | 
						|
	   '-G[match only real group id]:group:->group' 
 | 
						|
	   '-s[match only session id]:session id:->sid' 
 | 
						|
	   '-t[match only controlled by terminal]:terminal device:->tty'
 | 
						|
	   '-u[match only effective user id]:user:->user' 
 | 
						|
	   '-U[match only real user id]:user:->user' 
 | 
						|
           '(-n)-o[oldest process]' 
 | 
						|
	   '(-o)-n[newest process]' 
 | 
						|
	   '-f[match against full command line]' 
 | 
						|
	   '-v[negate matching]' 
 | 
						|
	   '-x[match exactly]' 
 | 
						|
	   '*:process name:->pname')
 | 
						|
 | 
						|
if [[ $service == 'pkill' ]]
 | 
						|
then
 | 
						|
	arguments+=('-'${^signals}'[signal]')
 | 
						|
elif [[ $service == 'pgrep' ]]
 | 
						|
then
 | 
						|
	arguments+=('-d[output delimiter]:delimiter:compadd ${(s\:\:)IFS}'
 | 
						|
		    '-l[list name in addition to id]')
 | 
						|
fi
 | 
						|
 | 
						|
_arguments -s -w $arguments
 | 
						|
 | 
						|
case $state in
 | 
						|
	(tty)
 | 
						|
		compset -P '*,'
 | 
						|
 | 
						|
		local -a used
 | 
						|
		used=(${(s:,:)IPREFIX})
 | 
						|
 | 
						|
		compadd -S ',' -q -F used /dev/tty*(:t)
 | 
						|
		;;
 | 
						|
		
 | 
						|
	(sid)
 | 
						|
		compset -P '*,'
 | 
						|
 | 
						|
		local -a used sid
 | 
						|
		used=(${(s:,:)IPREFIX})
 | 
						|
		sid=(${(uon)$(ps -A o sid=)})
 | 
						|
 | 
						|
		compadd -S ',' -q -F used $sid
 | 
						|
		;;
 | 
						|
	
 | 
						|
	(ppid)
 | 
						|
		compset -P '*,'
 | 
						|
 | 
						|
		local -a used ppid
 | 
						|
		used=(${(s:,:)IPREFIX})
 | 
						|
		ppid=(${(uon)$(ps -A o ppid=)})
 | 
						|
 | 
						|
		compadd -S ',' -q -F used $ppid
 | 
						|
		;;
 | 
						|
 | 
						|
	(pgid)
 | 
						|
		compset -P '*,'
 | 
						|
 | 
						|
		local -a used pgid
 | 
						|
		used=(${(s:,:)IPREFIX})
 | 
						|
		pgid=(${(uon)$(ps -A o pgid=)})
 | 
						|
 | 
						|
		compadd -S ',' -q -F used $pgid
 | 
						|
		;;
 | 
						|
	
 | 
						|
	(pname)
 | 
						|
		if (( ${+opt_args[-x]} )) && (( ${+opt_args[-f]} ))
 | 
						|
		then
 | 
						|
			compadd ${(u)${(f)"$(ps -A o cmd=)"}}
 | 
						|
		else
 | 
						|
			compadd ${(u)${(f)"$(ps -A co cmd=)"}}
 | 
						|
		fi
 | 
						|
		;;
 | 
						|
	
 | 
						|
	(group)
 | 
						|
		compset -P '*,'
 | 
						|
 | 
						|
		local group
 | 
						|
		group=$(getent group)
 | 
						|
 | 
						|
		local -a groups ids
 | 
						|
		groups=(${${(f)group}%%:*})
 | 
						|
		ids=(${${${(f)group}#*:*:}%%:*})
 | 
						|
 | 
						|
		local -a used
 | 
						|
		used=(${(s:,:)IPREFIX})
 | 
						|
 | 
						|
		compadd -S ',' -q -F used -d ids $groups $groups
 | 
						|
		;;
 | 
						|
 | 
						|
	(user)
 | 
						|
		compset -P '*,'
 | 
						|
 | 
						|
		local passwd
 | 
						|
		passwd=$(getent passwd)
 | 
						|
 | 
						|
		local -a users ids
 | 
						|
		users=(${${(f)passwd}%%:*})
 | 
						|
		ids=(${${${(f)passwd}#*:*:}%%:*})
 | 
						|
		
 | 
						|
		local -a used
 | 
						|
		used=(${(s:,:)IPREFIX})
 | 
						|
 | 
						|
		compadd -S ',' -q -F used -d ids $users $users
 | 
						|
		;;
 | 
						|
esac
 |