about summary refs log tree commit diff
path: root/Completion/Unix/Command/_pgrep
blob: e460202a10fb1c0a01596c22faadfa91a002f7c4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#compdef pgrep pkill 

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:_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')

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 && ret=0

case $state in
  (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