#autoload # If given the `-m ' option, this tries to complete only pids # of processes whose command line match the `'. local out list expl match desc listargs args all nm ret=1 _tags processes || return 1 if [[ "$1" = -m ]]; then all=() match="[[:blank:]]#${PREFIX}[0-9]#${SUFFIX}[[:blank:]]*[/[:blank:]]${2}*" shift 2 elif [[ "$PREFIX$SUFFIX" = [0-9]# ]]; then all=() match="[[:blank:]]#${PREFIX}[0-9]#${SUFFIX}[[:blank:]]*" else all=(-U) match="*[[:blank:]]*[[/[:blank:]]$PREFIX*$SUFFIX*" nm="$compstate[nmatches]" fi zstyle -s ":completion:${curcontext}:processes" command args out="$(_call processes ps 2>/dev/null)" if zstyle -T ":completion:${curcontext}:processes" verbose; then zstyle -s ":completion:${curcontext}:processes-list" command listargs (( $#listargs )) || listargs=( "$args[@]" ) if [[ "$listargs" = "$args" ]]; then list=("${(@Mr:COLUMNS-1:)${(f@)out}[2,-1]:#${~match}}") else list=("${(@Mr:COLUMNS-1:)${(f@)$(_call processes-list ps 2>/dev/null)}[2,-1]:#${~match}}") fi desc=(-ld list) else desc=() fi _wanted processes expl 'process ID' \ compadd "$@" "$desc[@]" "$all[@]" - \ ${${${(M)${(f)"${out}"}[2,-1]:#${~match}}## #}%% *} && ret=0 if [[ -n "$all" ]]; then zstyle -s ":completion:${curcontext}:processes" insert-ids out || out=menu case "$out" in menu) compstate[insert]=menu ;; single) [[ $compstate[nmatches] -ne nm+1 ]] && compstate[insert]= ;; *) [[ ${#:-$PREFIX$SUFFIX} -gt ${#compstate[unambiguous]} ]] && compstate[insert]=menu ;; esac fi return ret