summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Murzov <e-mail@date.by>2011-11-09 05:21:53 +0300
committerIgor Murzov <e-mail@date.by>2011-11-09 05:21:53 +0300
commite4cdcca08ee486e0354d1872ab997bb08e88b569 (patch)
tree91e54889fbccfc397d915ebde51afbb6ef0870c5
parentfbbd476df0fc5e077ba8fbf679e685fdbda4c8df (diff)
downloadbash-completion-e4cdcca08ee486e0354d1872ab997bb08e88b569.tar.gz
Merge completions/service into the bash_completion script.
If completion for a basename foo is already installed, the default completion loader no longer fires for /etc/init.d/foo -- the basename completion is invoked directly instead. This means that we need to load completions for /etc/init.d and friends eagerly at bash_completion load :(
-rw-r--r--bash_completion36
-rw-r--r--completions/service36
2 files changed, 31 insertions, 41 deletions
diff --git a/bash_completion b/bash_completion
index 72234251..497dbb5a 100644
--- a/bash_completion
+++ b/bash_completion
@@ -1074,6 +1074,37 @@ _services()
-- "$cur" ) )
}
+# This completes on a list of all available service scripts for the
+# 'service' command and/or the SysV init.d directory, followed by
+# that script's available commands
+#
+_service()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ # don't complete past 2nd token
+ [ $cword -gt 2 ] && return 0
+
+ if [[ $cword -eq 1 && $prev == ?(*/)service ]]; then
+ _services
+ else
+ local sysvdirs
+ _sysvdirs
+ COMPREPLY=( $( compgen -W '`sed -e "y/|/ /" \
+ -ne "s/^.*\(U\|msg_u\)sage.*{\(.*\)}.*$/\2/p" \
+ ${sysvdirs[0]}/${prev##*/} 2>/dev/null` start stop' -- "$cur" ) )
+ fi
+} &&
+complete -F _service service
+_sysvdirs
+for svcdir in ${sysvdirs[@]}; do
+ for svc in $svcdir/!($_backup_glob); do
+ [ -x "$svc" ] && complete -F _service $svc
+ done
+done
+unset svc svcdir sysvdirs
+
# This function completes on modules
#
_modules()
@@ -1848,11 +1879,6 @@ _completion_loader()
local compdir=./completions
[[ $BASH_SOURCE == */* ]] && compdir="${BASH_SOURCE%/*}/completions"
- # Special case for init.d scripts.
- if [[ $1 == /etc/@(rc.d|init.d)/* ]]; then
- . "$compdir/service" &>/dev/null && return 124 || return 1
- fi
-
# Try basename.
. "$compdir/${1##*/}" &>/dev/null && return 124
diff --git a/completions/service b/completions/service
deleted file mode 100644
index 147aad4f..00000000
--- a/completions/service
+++ /dev/null
@@ -1,36 +0,0 @@
-# service(8) and /etc/init.d/* completion -*- shell-script -*-
-
-# This completes on a list of all available service scripts for the
-# 'service' command and/or the SysV init.d directory, followed by
-# that script's available commands
-
-_service()
-{
- local cur prev words cword
- _init_completion || return
-
- # don't complete past 2nd token
- [ $cword -gt 2 ] && return 0
-
- if [[ $cword -eq 1 && $prev == ?(*/)service ]]; then
- _services
- else
- local sysvdirs
- _sysvdirs
- COMPREPLY=( $( compgen -W '`sed -e "y/|/ /" \
- -ne "s/^.*\(U\|msg_u\)sage.*{\(.*\)}.*$/\2/p" \
- ${sysvdirs[0]}/${prev##*/} 2>/dev/null` start stop' -- "$cur" ) )
- fi
-
- return 0
-} &&
-complete -F _service service
-_sysvdirs
-for svcdir in ${sysvdirs[@]}; do
- for svc in $svcdir/!($_backup_glob); do
- [ -x "$svc" ] && complete -F _service $svc
- done
-done
-unset svc svcdir sysvdirs
-
-# ex: ts=4 sw=4 et filetype=sh