fix killall completions

This fixes the obvious error in handling the `-u` short flag.
See issue #4052.
This commit is contained in:
Kurtis Rader 2017-05-22 20:17:08 -07:00
parent a3a069234b
commit a71bb03f23

View file

@ -1,44 +1,46 @@
# For Solaris, `killall` kills all processes, so we really don't want to invoke it. # On Solaris, `killall` kills all processes. So we don't want to bother providing completion
# support on that OS.
set -l OS (uname) set -l OS (uname)
if test "$OS" != 'SunOS' if test "$OS" = 'SunOS'
__fish_make_completion_signals exit 0
end
for i in $__kill_signals
set -l numname (string split " " -- $i) __fish_make_completion_signals
set -l number $numname[1]
set -q numname[2] for i in $__kill_signals
and set -l name $numname[2] set -l numname (string split " " -- $i)
complete -c killall -o $number -d $name set -l number $numname[1]
complete -c killall -o $name set -q numname[2]
# Doesn't work in OS X; -s is simulate and set -l name $numname[2]
test "$OS" != 'Darwin' complete -c killall -o $number -d $name
and complete -c killall -s s -x -a "$number $name" complete -c killall -o $name
end # The `-s` flag doesn't work in OS X
test "$OS" != 'Darwin'
complete -c killall -xa '(__fish_complete_proc)' and complete -c killall -s s -x -a "$number $name"
end
if killall --version >/dev/null ^/dev/null # GNU
complete -c killall -s e -l exact -d 'Require an exact match for very long names' complete -c killall -xa '(__fish_complete_proc)'
complete -c killall -s I -l ignore-case -d 'Do case insensitive process name match'
complete -c killall -s g -l process-group -d 'Kill the process group to which the process belongs. The kill signal is only sent once per group, even if multiple processes belonging to the same process group were found' if killall --version >/dev/null ^/dev/null # GNU
complete -c killall -s i -l interactive -d 'Interactively ask for confirmation before killing' complete -c killall -s e -l exact -d 'Require an exact match for very long names'
complete -c killall -s u -l user -d 'Kill only processes the specified user owns. Command names are optional' -x complete -c killall -s I -l ignore-case -d 'Do case insensitive process name match'
complete -c killall -s -u -l user -x -a "(__fish_complete_users)" complete -c killall -s g -l process-group -d 'Kill the process group to which the process belongs. The kill signal is only sent once per group, even if multiple processes belonging to the same process group were found'
complete -c killall -s w -l wait -d 'Wait for all killed processes to die. killall checks once per second if any of the killed processes still exist and only returns if none are left. Note that killall may wait forever if the signal was ignored, had no effect, or if the process stays in zombie state' complete -c killall -s i -l interactive -d 'Interactively ask for confirmation before killing'
complete -c killall -s v -l version -d 'Print version' complete -c killall -s u -l user -x -a "(__fish_complete_users)" -d 'Kill only processes the specified user owns. Command names are optional'
else complete -c killall -s w -l wait -d 'Wait for all killed processes to die'
complete -c killall -s v -d 'Be more verbose about what will be done' complete -c killall -s v -l version -d 'Print version'
complete -c killall -s e -d 'Use effective user ID instead of the real user ID for matching processes specified with the -u option' else # probably BSD
complete -c killall -s help -d 'Print help and exit' complete -c killall -s v -d 'Be more verbose about what will be done'
complete -c killall -s l -d 'List names of available signals and exit' complete -c killall -s e -d 'Use effective UID instead of the real UID for matching processes specified with the -u option'
complete -c killall -s m -d 'Case sensitive argument match for processed' complete -c killall -s help -d 'Print help and exit'
complete -c killall -s s -d 'Simulate, but do not send any signals' complete -c killall -s l -d 'List names of available signals and exit'
complete -c killall -s d -d "Print detailed info. Doesn't send signals" complete -c killall -s m -d 'Case sensitive argument match for processed'
complete -c killall -s u -x -d 'Only processes for USER' complete -c killall -s s -d 'Simulate, but do not send any signals'
complete -c killall -s -u -l user -x -a "(__fish_complete_users)" complete -c killall -s d -d "Print detailed info. Doesn't send signals"
complete -c killall -s t -d 'Limit to processes running on specified TTY' complete -c killall -s u -x -a "(__fish_complete_users)" -d 'Kill only processes the specified user owns. Command names are optional'
complete -c killall -s t -xa "(ps a -o tty | sed 1d | uniq)" complete -c killall -s -u -l user -x -a "(__fish_complete_users)"
complete -c killall -s c -x -d 'Limit to processes matching specified PROCNAME' complete -c killall -s t -d 'Limit to processes running on specified TTY'
complete -c killall -s z -d 'Do not skip zombies' complete -c killall -s t -xa "(ps a -o tty | sed 1d | uniq)"
end complete -c killall -s c -x -d 'Limit to processes matching specified PROCNAME'
complete -c killall -s z -d 'Do not skip zombies'
end end