From c492f00705511800cee5634d241198355ff9db10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Sun, 15 Feb 2009 18:47:34 +0200 Subject: [PATCH] Extract process name completion from _killall to _pnames, make it work for others than Linux and FreeBSD. --- bash_completion | 37 ++++++++++++++++++++++++++----------- debian/changelog | 4 +++- 2 files changed, 29 insertions(+), 12 deletions(-) diff --git a/bash_completion b/bash_completion index b03d79fc..e522898b 100644 --- a/bash_completion +++ b/bash_completion @@ -428,6 +428,31 @@ _pgids() COMPREPLY=( $( compgen -W '$( command ps axo pgid | sed 1d )' -- $cur )) } +# This function completes on process names. +# AIX and SunOS prefer X/Open, all else should be BSD. +[ $UNAME = SunOS -o $UNAME = AIX ] && +_pnames() +{ + COMPREPLY=( $( compgen -W '$( command ps -efo comm | \ + sed -e 1d -e "s:.*/::" -e "s/^-//" \ + -e "s/^$//")' \ + -- $cur ) ) +} || +_pnames() +{ + # FIXME: completes "[kblockd/0]" to "0". Previously it was completed + # to "kblockd" which isn't correct either. "kblockd/0" would be + # arguably most correct, but killall from psmisc 22 treats arguments + # containing "/" specially unless -r is given so that wouldn't quite + # work either. Perhaps it'd be best to not complete these to anything + # for now. + COMPREPLY=( $( compgen -W '$( command ps axo command | \ + sed -e "1d; s/ .*//; s:.*/::; s/:$//;" \ + -e "s/^[[(-]//; s/[])]$//" \ + -e "s/^$//")' \ + -- $cur ) ) +} + # This function completes on user IDs # _uids() @@ -1028,17 +1053,7 @@ _killall() if [ $COMP_CWORD -eq 1 ] && [[ "$cur" == -* ]]; then _signals else - # FIXME: completes "[kblockd/0]" to "0". Previously it was - # completed to "kblockd" which isn't correct either. - # "kblockd/0" would be arguably most correct, but killall from - # psmisc 22 treats arguments containing "/" specially unless - # -r is given so that wouldn't quite work either. Perhaps it'd - # be best to not complete these to anything for now. - COMPREPLY=( $( compgen -W '$( command ps axo command | \ - sed -e "1d; s/ .*//; s:.*/::; s/:$//;" \ - -e "s/^[[(-]//; s/[])]$//" \ - -e "s/^$//")' \ - -- $cur ) ) + _pnames fi return 0 diff --git a/debian/changelog b/debian/changelog index 54c0644f..5d8c6cbb 100644 --- a/debian/changelog +++ b/debian/changelog @@ -122,7 +122,9 @@ bash-completion (200902xx) UNRELEASED; urgency=low * Fix awk error in "modprobe -r /" completion (Closes: #512556). * Expand ~foo to dir name more eagerly to avoid quoting issues. * Fix -sourcepath handling in javadoc packages completion. - * Fix killall completion for commands with relative paths (RHBZ: #484578). + * Extract process name completion from _killall to _pnames, make it work + for others than Linux and FreeBSD. + * Fix process name completion with relative paths (RHBZ: #484578). [ Freddy Vulto ] * Restored `_display()' completion for `display' by removing