summaryrefslogtreecommitdiff
path: root/Completion/Unix/Command/_ps
diff options
context:
space:
mode:
authorAxel Beckert <abe@deuxchevaux.org>2015-05-05 23:32:59 +0200
committerAxel Beckert <abe@deuxchevaux.org>2015-05-05 23:58:59 +0200
commitdb38e167634b6c2217eec3a5aafc37c46d9e5a8d (patch)
treedaa342d423febbd3a5a7ef97053037677fab004a /Completion/Unix/Command/_ps
parent01eea47617a6e06debdb4330f92ae69f92089fd2 (diff)
parent3c3c8d3d13fd4cf6c03f81ca8dc18a1efd561728 (diff)
downloadzsh-db38e167634b6c2217eec3a5aafc37c46d9e5a8d.tar.gz
zsh-db38e167634b6c2217eec3a5aafc37c46d9e5a8d.zip
Merge branch 'upstream' into debian
Diffstat (limited to 'Completion/Unix/Command/_ps')
-rw-r--r--Completion/Unix/Command/_ps188
1 files changed, 188 insertions, 0 deletions
diff --git a/Completion/Unix/Command/_ps b/Completion/Unix/Command/_ps
new file mode 100644
index 000000000..925f48390
--- /dev/null
+++ b/Completion/Unix/Command/_ps
@@ -0,0 +1,188 @@
+#compdef ps
+
+_ps_props() {
+ local opts
+
+ if [[ $1 = -s ]]; then
+ shift
+ compset -P '[+-]' || _describe -t modifiers modifier \
+ '( +:ascending\ order -:descending\ order )' -S ''
+ fi
+
+ case $OSTYPE in
+ linux-gnu) opts=( ${${(f)"$(_call_program properties $words[1] L)"}%% *} ) ;;
+ freebsd*) opts=( $(_call_program properties $words[1] L) ) ;;
+ solaris*) opts=( ${=${(f)"$(_call_program properties $words[1] - 2>&1)"}[-3,-1]} ) ;;
+ esac
+
+ compadd "$@" -a opts
+}
+
+local curcontext="$curcontext" state line expl ret=1
+local short long
+local -a args bsd bsdarg pids
+local -A equivs
+
+args=(
+ '-a[select processes with tty except session leaders]'
+ {-A,-e}'[select every process]'
+ '-d[select all processes except session leaders]'
+ '*-p+[select processes by ID]:process ID:_sequence -s , _pids'
+ '*-G+[select processes by real group]:group:_sequence -s , _groups'
+ '*-g+[select processes by effective group or session]:group:_sequence -s , _groups'
+ '*-s+[select processes by session leaders]:session leader:_sequence -s , _pids'
+ '*-t+[select processes by attached terminal]:tty:_sequence -s , compadd - /dev/pts/<->(N\:s/\\/dev\\//) /dev/tty*(N\:t)'
+ '*-u+[select processes by effective user]:user:_sequence -s , _users'
+ '*-U+[select processes by real user]:user:_sequence -s , _users'
+ '-o+[specify output format]:property:_sequence -s , _ps_props -'
+
+ '-c[show scheduler properties]'
+ '-f[full listing]'
+ '-j[show session ID and process group ID]'
+ '-l[long listing]'
+ '-L[show information about each light weight process]'
+ '-y[show RSS in place of ADDR (used with -l)]'
+)
+
+bsd=(
+ 'a[include processes belonging to other users]'
+ 'e[show environment after command]'
+ '(j s u v X)l[output in long format]'
+ '(l s u v X)j[output in job control format]'
+ 'x[include processes with no controlling terminal]'
+ '(j l s v X)u[output in resource usage format]'
+ '(j l s u X)v[output in virtual memory format]'
+ '*w[wide output]'
+ 'H[show threads as if they were processes]'
+ 'L[display all format specifiers]'
+ 'S[include child process data with the parent]'
+ 'T[select processes attached to current terminal]'
+ 'Z[show security data]'
+)
+bsdarg=(
+ '*p[select processes by ID]'
+ '*t[select processes by attached terminal]'
+ '*U[select processes by effective user]'
+ 'O[specify additional output fields]'
+ 'o[specify output format]'
+ 'N[set namelist file for WCHAN display]'
+)
+
+case $OSTYPE in
+ solaris2.<11->)
+ args+=(
+ '-h[select processes homed to the specified lgrp]:lgrp list'
+ '-H[show home lgroup of the process]'
+ )
+ ;|
+ solaris*)
+ args+=(
+ '-P[show processor to which the process or lwp is bound]'
+ '*-z[select processes by zone]:zone list:_sequence _zones'
+ '-Z[show zone with which process is associated]'
+ )
+ ;;
+ darwin*|dragonfly*|freebsd*|netbsd*|openbsd*)
+ bsd+=(
+ 'A[select every process]'
+ 'C[ignore resident time for CPU percentage]'
+ 'c[show just executable name for command]'
+ 'h[repeat header lines, one per page of output]'
+ '(r)m[sort by memory usage]'
+ '(m)r[sort by CPU usage]'
+ )
+ bsdarg+=(
+ 'M[extract values from specified core]'
+ )
+ ;|
+ linux-gnu|netbsd*) bsdarg+=( 'k[specify sort order]' ) ;|
+ darwin*|freebsd*) bsdarg+=( 'G[select processes by real group]' ) ;|
+ freebsd*)
+ bsd+=(
+ 'd[show process hierarchy]'
+ 'f[show command and environment for swapped out processes]'
+ '*J[select processes by jail ID]'
+ )
+ ;;
+ netbsd*) bsd+=( '(j l u v)s[output in thread format]' ) ;;
+ openbsd*)
+ bsd+=(
+ 'k[display information about kernel threads]'
+ )
+ bsdarg+=( 'W[extract swap information from the specified file]' )
+ ;;
+ linux-gnu)
+ args+=(
+ '-O+[specify additional output fields]:property:_sequence -s , _ps_props -'
+ '(-N --deselect)'{-N,--deselect}'[negate selection: all processes except those selected]'
+ '*-C[select processes by command name]:command:_sequence -s , _command_names -e'
+ '*--ppid[select processes by parent process ID]:parent process:_sequence -S , _pids'
+ '(-f)-F[extra full format listing]'
+ '--context[show SELinux security context format]'
+ '-M[show security data]'
+ '(--forest -H)'{--forest,-H}'[show process hierarchy]'
+ '--headers[repeat header lines, one per page of output]'
+ '(--cols --columns --width)'{--cols,--columns,--width}'[set screen width]:width'
+ '(--lines --rows)'{--lines,--rows}'[set screen height]'
+ '--cumulative[include child process data with the parent]'
+ '-n[set namelist file for WCHAN display]:file:_files'
+ '(--no-headers --no-heading)'{--no-headers,--no-heading}'[suppress headers]'
+ '--sort=[specify sort order]:order:_ps_props -s'
+ '-w[wide output]'
+ '-m[show threads after processes]'
+ '-T[show threads, with SPID column]'
+ '-Z[show security context format (SELinux)]'
+ '(- *)--help[display help information]::subject:(simple list output threads misc all)'
+ '(- *)--info[display debugging information]'
+ '(- *)'{-V,--version}'[display version information]'
+ )
+ equivs=( G Group g group p pid s sid t tty U User u user o format )
+ for short long in ${(kv)equivs}; do
+ args+=( ${${(M)args:#(\*|)-$short*}/$short+/-$long=} )
+ done
+ bsd+=(
+ 'c[show true command name]'
+ 'f[show process hierarchy]'
+ 'h[suppress header]'
+ 'm[show threads after processes]'
+ 'n[numeric output for WCHAN and USER]'
+ 'r[select running processes]'
+ '(j l u v X)s[output in signal format]'
+ 'V[display version information]'
+ '(j l s u v)X[output in register format]'
+ )
+ ;;
+esac
+
+if (( CURRENT > 1 )) && [[ $OSTYPE != solaris* || ( $OSTYPE = linux-gnu && $words[CURRENT-1] != -* ) ]]; then
+ case $words[CURRENT-1] in
+ *k)
+ _wanted -C option-k-1 properties expl 'property' _sequence -s , _ps_props -s - && return
+ ;;
+ *G) _sequence -s , _groups && return ;;
+ *J) _sequence -s , _jails && return ;;
+ *[MNW]) _files && return ;;
+ *t)
+ _wanted -C option-t-1 ttys expl tty _sequence -s , \
+ compadd - /dev/pts/<->(N\:s/\\/dev\\//) /dev/tty*(N\:t) && return
+ ;;
+ *p) _wanted -C option-p-1 processes expl 'process ID' _sequence -s , _pids && return;;
+ *U) _wanted -C option-U-1 users expl user _sequence -s , _users && return ;;
+ *[oO]) _wanted -C "option-${words[CURRENT-1][-1]}-1" properties \
+ expl 'property' _sequence -s , _ps_props - && return ;;
+ esac
+fi
+
+if [[ $OSTYPE = (*bsd*|darwin*|dragonfly*) ]]; then
+ compset -P - && pids=1
+else
+ _arguments -C -s $args '*:: :->rest' && ret=0
+ [[ -z "$state" || $OSTYPE = solaris* ]] && return ret
+fi
+
+_values -s '' -S ' ' 'options' $bsd && ret=0
+_values -S ' ' 'options' $bsdarg && ret=0
+if [[ -z $pids ]]; then
+ _pids && compstate[insert]=
+fi
+return ret