summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVille Skyttä <ville.skytta@iki.fi>2011-10-26 21:01:18 +0300
committerVille Skyttä <ville.skytta@iki.fi>2011-10-26 21:01:18 +0300
commit099b47c66d48537311d53493dca67017c2493f84 (patch)
tree55f3ee293e28181ffb0f0ada6841a3ed3dd18bfc
parent79ac9b592131e434575beaf2204210c32d9b304a (diff)
downloadbash-completion-099b47c66d48537311d53493dca67017c2493f84.tar.gz
kill, killall: Add some option and argument completions, simplify _signals.
-rw-r--r--bash_completion16
-rw-r--r--completions/kill13
-rw-r--r--completions/killall22
-rw-r--r--test/lib/completions/kill.exp8
-rw-r--r--test/lib/completions/killall.exp2
-rw-r--r--test/lib/library.exp5
6 files changed, 44 insertions, 22 deletions
diff --git a/bash_completion b/bash_completion
index b550153f..6d119ecb 100644
--- a/bash_completion
+++ b/bash_completion
@@ -777,20 +777,12 @@ _parse_usage()
done
}
-# This function completes on signal names
-#
+# This function completes on signal names (minus the SIG prefix)
+# @param $1 prefix
_signals()
{
- local i
-
- # standard signal completion is rather braindead, so we need
- # to hack around to get what we want here, which is to
- # complete on a dash, followed by the signal name minus
- # the SIG prefix
- COMPREPLY=( $( compgen -A signal SIG${cur#-} ))
- for (( i=0; i < ${#COMPREPLY[@]}; i++ )); do
- COMPREPLY[i]=-${COMPREPLY[i]#SIG}
- done
+ local -a sigs=( $( compgen -P "$1" -A signal "SIG${cur#$1}" ) )
+ COMPREPLY+=( "${sigs[@]/#${1}SIG/${1}}" )
}
# This function completes on known mac addresses
diff --git a/completions/kill b/completions/kill
index d3c5fbe7..150f2116 100644
--- a/completions/kill
+++ b/completions/kill
@@ -5,9 +5,20 @@ _kill()
local cur prev words cword
_init_completion || return
+ case $prev in
+ -s)
+ _signals
+ return
+ ;;
+ -l)
+ return
+ ;;
+ esac
+
if [[ $cword -eq 1 && "$cur" == -* ]]; then
# return list of available signals
- _signals
+ _signals -
+ COMPREPLY+=( $( compgen -W "-s -l" -- "$cur" ) )
else
# return list of available PIDs
_pids
diff --git a/completions/killall b/completions/killall
index 8d05d132..9a17ec25 100644
--- a/completions/killall
+++ b/completions/killall
@@ -2,11 +2,27 @@
_killall()
{
- local cur prev words cword
- _init_completion || return
+ local cur prev words cword split
+ _init_completion -s || return
+
+ case $prev in
+ -Z|--context|-o|--older-than|-y|--younger-than|-V|--version)
+ return
+ ;;
+ -s|--signal)
+ [[ $1 == *killall ]] && _signals
+ return
+ ;;
+ -u|--user)
+ _allowed_users
+ return
+ ;;
+ esac
+
+ $split && return
if [[ $cword -eq 1 && "$cur" == -* ]]; then
- _signals
+ _signals -
else
_pnames
fi
diff --git a/test/lib/completions/kill.exp b/test/lib/completions/kill.exp
index 1e80fe69..bc07bc48 100644
--- a/test/lib/completions/kill.exp
+++ b/test/lib/completions/kill.exp
@@ -12,14 +12,16 @@ setup
assert_complete_any "kill 1"
-
-
sync_after_int
-assert_complete [get_signals] "kill -"
+assert_complete [get_signals] "kill -s "
+sync_after_int
+set expected [get_signals -]
+lappend expected "-l" "-s"
+assert_complete [lsort -unique $expected] "kill -"
sync_after_int
diff --git a/test/lib/completions/killall.exp b/test/lib/completions/killall.exp
index ae8b3d60..1ee3ade8 100644
--- a/test/lib/completions/killall.exp
+++ b/test/lib/completions/killall.exp
@@ -17,7 +17,7 @@ assert_complete_any "killall "
sync_after_int
-assert_complete [get_signals] "killall -"
+assert_complete [get_signals -] "killall -"
sync_after_int
diff --git a/test/lib/library.exp b/test/lib/library.exp
index 4ff2885f..35eddf80 100644
--- a/test/lib/library.exp
+++ b/test/lib/library.exp
@@ -659,8 +659,9 @@ proc get_hosts_avahi {} {
# Get signals
# This function is written in analogy to the bash function `_signals()' in
# `bash_completion'.
+# @param prefix
# @return list Signals starting with `SIG', but with the `SIG' prefix removed.
-proc get_signals {} {
+proc get_signals {{prefix ""}} {
set signals {}
foreach signal [exec bash -c {compgen -A signal}] {
# Does signal start with `SIG'?
@@ -668,7 +669,7 @@ proc get_signals {} {
# Remove `SIG' prefix
set signal [string range $signal 3 end]
# Add signal (with dash (-) prefix) to list
- lappend signals -$signal
+ lappend signals $prefix$signal
}
}
return $signals