diff options
author | Igor Murzov <e-mail@date.by> | 2011-11-09 05:21:53 +0300 |
---|---|---|
committer | Igor Murzov <e-mail@date.by> | 2011-11-09 05:21:53 +0300 |
commit | e4cdcca08ee486e0354d1872ab997bb08e88b569 (patch) | |
tree | 91e54889fbccfc397d915ebde51afbb6ef0870c5 | |
parent | fbbd476df0fc5e077ba8fbf679e685fdbda4c8df (diff) | |
download | bash-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_completion | 36 | ||||
-rw-r--r-- | completions/service | 36 |
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 |