From 1c2ff6852911c47b1386d72e781b465f140e77eb Mon Sep 17 00:00:00 2001 From: Mikael Magnusson Date: Fri, 16 Sep 2011 12:18:40 +0000 Subject: 29764, 29765: fix various problems with _pgrep. --- Completion/Unix/Command/_pgrep | 169 ++++++++++++++++++----------------------- 1 file changed, 73 insertions(+), 96 deletions(-) (limited to 'Completion') diff --git a/Completion/Unix/Command/_pgrep b/Completion/Unix/Command/_pgrep index f65324a81..e460202a1 100644 --- a/Completion/Unix/Command/_pgrep +++ b/Completion/Unix/Command/_pgrep @@ -1,112 +1,89 @@ #compdef pgrep pkill -local context state line +local context state line ret=1 expl 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' + '-g[match only in process group ids]:group:->pgid' + '-G[match only real group id]:group:_groups' + '-s[match only session id]:session id:->sid' + '-t[match only controlled by terminal]:terminal device:->tty' + '-u[match only effective user id]:user:_users' + '-U[match only real user id]:user:_users' '(-n)-o[oldest process]' - '(-o)-n[newest process]' - '-f[match against full command line]' - '-v[negate matching]' - '-x[match exactly]' - '*:process name:->pname') + '(-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]') + arguments+=('-'${^signals}'[signal]') elif [[ $service == 'pgrep' ]] then - arguments+=('-d[output delimiter]:delimiter:compadd ${(s\:\:)IFS}' - '-l[list name in addition to id]') + arguments+=('-d[output delimiter]:delimiter:compadd ${(s\:\:)IFS}' + '-l[list name in addition to id]') fi -_arguments -s -w $arguments +_arguments -s -w $arguments && ret=0 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 + (tty) + compset -P '*,' + + local -a used ttys + used=(${(s:,:)IPREFIX}) + + ttys=( /dev/tty*(N) /dev/pts/*(N) ) + _wanted tty expl 'terminal device' compadd -S ',' -q -F used ${ttys#/dev/} + ;; + + (sid) + compset -P '*,' + + local -a used sid + used=(${(s:,:)IPREFIX}) + sid=(${(uon)$(ps -A o sid=)}) + + _wanted sid expl 'session id' compadd -S ',' -q -F used $sid + ;; + + (ppid) + compset -P '*,' + + local -a used ppid + used=(${(s:,:)IPREFIX}) + ppid=(${(uon)$(ps -A o ppid=)}) + + _wanted ppid expl 'parent process id' compadd -S ',' -q -F used $ppid + ;; + + (pgid) + compset -P '*,' + + local -a used pgid + used=(${(s:,:)IPREFIX}) + pgid=(${(uon)$(ps -A o pgid=)}) + + _wanted pgid expl 'process group id' compadd -S ',' -q -F used $pgid + ;; + + (pname) + local ispat="pattern matching " + if (( ${+opt_args[-x]} )) + then + ispat="" + fi + if (( ${+opt_args[-f]} )) + then + _wanted pname expl $ispat'process command line' compadd ${(u)${(f)"$(ps -A o cmd=)"}} + else + _wanted pname expl $ispat'process name' compadd ${(u)${(f)"$(ps -A co cmd=)"}} + fi + ;; + +esac && ret=0 + +return ret -- cgit 1.4.1