From: Jun T <takimoto-j@kba.biglobe.ne.jp>
To: zsh-workers@zsh.org
Subject: [PATCH] rewrite _killall
Date: Thu, 28 Jun 2018 16:39:35 +0900 [thread overview]
Message-ID: <C3A7A339-300C-4D7A-8F24-5165BB927115@kba.biglobe.ne.jp> (raw)
_killall has many options which need be completed.
The previous patch to _ttys is required.
diff --git a/Completion/Unix/Command/_killall b/Completion/Unix/Command/_killall
index 375b1bf74..989772c5d 100644
--- a/Completion/Unix/Command/_killall
+++ b/Completion/Unix/Command/_killall
@@ -1,9 +1,77 @@
#compdef killall killall5
-if [[ $service = killall && "$OSTYPE" = (linux*|*bsd*|darwin*) ]]; then
- _alternative \
- 'signals:: _signals -p' \
- 'processes-names:process:{ compadd "$expl[@]" ${${${${(f)"$(_call_program processes-names ps ${${EUID/(#s)0(#e)/xa}//[0-9]#/}ho command 2> /dev/null)"//[][\(\)]/}:#(ps|COMMAND|-*)}%%\ *}:t} }'
-else
+if [[ $service = killall5 || $OSTYPE != (linux|*bsd|dragonfly|darwin)* ]]; then
_signals -p
+ return
+fi
+
+typeset -a opts args
+[[ $EUID = 0 || $_comp_priv_prefix[1] = sudo ]] && opts=( -a )
+
+if _pick_variant psmisc=PSmisc unix --version; then
+
+ local curcontext=$curcontext state state_descr line ret=1
+ typeset -A opt_args
+ args=(
+ '(-e --exact)'{-e,--exact}'[require exact match for names longer than 15 chars]'
+ '(-I --ignore-case)'{-I,--ignore-case}'[do case insensitive process name match]'
+ '(-g --process-group)'{-g,--process-group}'[kill the process group to which the process blongs]'
+ '(-i --interactive)'{-i,--interactive}'[interactively ask for confirmation before killing]'
+ '(- : *)'{-l,--list}'[list all known signal names]'
+ '(-n --ns)'{-n,--ns}'[match against the PID namespace of the given PID]:pid: _pids'
+ '(-o --older-than)'{-o,--older-than}'[match only processes older than the specified time]:time:->time'
+ '(-q --quiet)'{-q,--quiet}'[do not complain if no processes were killed]'
+ '(-r --regexp)'{-r,--regexp}'[interpret process name as extended regular expression]'
+ '(-s --signal)'{-s,--signal}'[send the speified signal]:signal:_signals'
+ '(-u --user)'{-u,--user}'[kill only processes owned by specified user]: : _users'
+ '(-v --verbose)'{-v,--verbose}'[report if the signal was successfully sent]'
+ '(-w --wait)'{-w,--wait}'[wait for all killed processes to die]'
+ '(- : *)'{-V,--version}'[display version information]'
+ '(-y --younger-than)'{-y,--younger-than}'[match only processes younger than the specified time]:time:->time'
+ "1: : _alternative 'signals: :_signals -p' 'processes-names: :_process_names $opts'"
+ "*: :_process_names $opts"
+ )
+ [[ $CURRENT = 2 || ( $CURRENT = 3 && $words[2] = (-Z|--context) ) ]] && \
+ args+=( '(-Z --context)'{-Z,--context}'[specify SELinux security context]:regex pattern: ' )
+
+ _arguments -s -S -C : $args && ret=0
+
+ case $state in
+ (time)
+ local -a units=( 's:seconds' 'm:minuts' 'h:hours' 'd:days'
+ 'w:weeks' 'M:months' 'y:years' )
+ if compset -P '[0-9]##(|.[0-9]#)'; then
+ _alternative 'float-number:: _message "float number"' \
+ 'unit:: _describe unit units' && ret=0
+ else
+ _message 'float number and unit' && ret=0
+ fi
+ ;;
+ esac
+
+ return ret
+
+else # bsd and darwin
+
+ if [[ $OSTYPE == (freebsd|dragonfly)* ]]; then
+ args=( '-j[kill processes in specified jail]: :_jails -0' )
+ opts+=( -t ) # long process names must be truncated
+ fi
+ args+=(
+ '-v[be more verbose about what will be done]'
+ '-e[use effective user ID for -u option]'
+ '(- : *)-help[give a help on command usage and exit]'
+ '(- : *)-l[list names of available signals and exit]'
+ '-m[interprit specified name as a regular expression]'
+ '-s[show only what will be done, but do notsend any signal]'
+ '-d[print info about processes matched, but do not send any signal]'
+ '-u[limit to processes belonging to specified user]: :_users'
+ '-t[limit to processes running on specified tty]: :_ttys -od'
+ "-c[with -u or -t, limit to processes matching specified name]: :_process_names $opts"
+ '-z[do not skip zombies]'
+ "1: : _alternative 'signals::_signals -p' 'processes-names::_process_names $opts'"
+ "*: :_process_names $opts"
+ )
+ _arguments -s -S : $args
+
fi
next reply other threads:[~2018-06-28 8:23 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-28 7:39 Jun T [this message]
2018-06-28 13:10 ` Jun T.
2018-06-28 14:52 ` dana
2018-06-29 11:45 ` Jun T
2018-07-01 16:17 ` Jun T.
2018-07-01 19:14 ` dana
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=C3A7A339-300C-4D7A-8F24-5165BB927115@kba.biglobe.ne.jp \
--to=takimoto-j@kba.biglobe.ne.jp \
--cc=zsh-workers@zsh.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/zsh/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).