summaryrefslogtreecommitdiff
path: root/Completion/Unix
diff options
context:
space:
mode:
Diffstat (limited to 'Completion/Unix')
-rw-r--r--Completion/Unix/Command/_ps4
-rw-r--r--Completion/Unix/Type/_ttys16
2 files changed, 13 insertions, 7 deletions
diff --git a/Completion/Unix/Command/_ps b/Completion/Unix/Command/_ps
index a8208a365..72e711227 100644
--- a/Completion/Unix/Command/_ps
+++ b/Completion/Unix/Command/_ps
@@ -31,7 +31,7 @@ args=(
'*-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 , _ttys -D'
+ '*-t+[select processes by attached terminal]:tty:_sequence -s , _ttys -Do'
'*-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 -'
@@ -211,7 +211,7 @@ if (( CURRENT > 1 )) && [[ $OSTYPE != (solaris*|linux-gnu) ||
*J) _sequence _jails -0 && return ;;
*[MNW]) _files && return ;;
*t)
- _wanted -C option-t-1 ttys expl tty _sequence -s , _ttys -D && return
+ _wanted -C option-t-1 ttys expl tty _sequence -s , _ttys -Do && return
;;
*[pq]) _wanted -C "option-${words[CURRENT-1][-1]}-1" processes \
expl 'process ID' _sequence -s , _pids && return ;;
diff --git a/Completion/Unix/Type/_ttys b/Completion/Unix/Type/_ttys
index 5e5598570..7408395c8 100644
--- a/Completion/Unix/Type/_ttys
+++ b/Completion/Unix/Type/_ttys
@@ -4,16 +4,22 @@
#
# -d strip /dev/ prefix from matches
# -D matches allowed with or without /dev/ prefix
+# -o only complete those ttys to which processes are attached
local -a ttys expl pre
-local stripdev optdev
+local stripdev optdev open
-zparseopts -D -K -E d=stripdev D=optdev
+zparseopts -D -K -E d=stripdev D=optdev o=open
-ttys=( /dev/tty?*(N) /dev/pts/^ptmx(N) )
-ttys=( ${ttys#/dev/} )
+if [[ -n $open ]]; then
+ ttys=( ${(u)${(f)"$(_call_program open-ttys ps -ao tty=)"}%% *} )
+ _description open-ttys expl 'open tty'
+else
+ ttys=( /dev/tty?*(N) /dev/pts/^ptmx(N) )
+ ttys=( ${ttys#/dev/} )
+ _description ttys expl 'tty'
+fi
[[ -z $stripdev ]] && pre=( -p /dev/ )
-_description ttys expl 'tty'
[[ -n $optdev ]] && compadd "$@" "$expl[@]" -M 'r:|/=* r:|=*' -a ttys && return
compadd "$@" "$expl[@]" "$pre[@]" -M 'r:|/=* r:|=*' -a ttys