From bad472928166d118de10d9f03755d8958f158982 Mon Sep 17 00:00:00 2001 From: Jun-ichi Takimoto Date: Sun, 1 Jul 2018 22:41:15 +0900 Subject: 43107: add an option to _ttys to complete only open ttys Use the option in _ps and _watch-snoop --- Completion/BSD/Command/_watch-snoop | 2 +- Completion/Unix/Command/_ps | 4 ++-- Completion/Unix/Type/_ttys | 16 +++++++++++----- 3 files changed, 14 insertions(+), 8 deletions(-) (limited to 'Completion') diff --git a/Completion/BSD/Command/_watch-snoop b/Completion/BSD/Command/_watch-snoop index 182b6bb34..1a4af07cc 100644 --- a/Completion/BSD/Command/_watch-snoop +++ b/Completion/BSD/Command/_watch-snoop @@ -10,4 +10,4 @@ _arguments -w -S -s : \ "-o[reconnect on overflow]" \ "-t[print date and time at start]" \ "-W[allow write access to observed tty]" \ - ":tty device:_ttys -D" + "(-): : _ttys -Do" 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 -- cgit 1.4.1