mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-09-08 12:01:21 +02:00
41 lines
1.2 KiB
Text
41 lines
1.2 KiB
Text
#compdef -p */(init|rc[0-9S]#).d/*
|
|
|
|
local magic cmds what script
|
|
|
|
_compskip=all
|
|
|
|
# This should probably be system specific...
|
|
|
|
script=$words[1]
|
|
if [[ $script != */* ]]; then
|
|
local -a scriptpath
|
|
local dir
|
|
# Known locations of init scripts
|
|
# C.f. Unix/Type/_services
|
|
scriptpath=(/etc/init.d /etc/rc.d /etc/rc.d/init.d)
|
|
|
|
for dir in $scriptpath; do
|
|
if [[ -f $dir/$script ]]; then
|
|
script=$dir/$script
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
|
|
# If the file starts with `#!' we hope that this is a shell script
|
|
# and get lines looking like <space>foo|bar) with the words in $what.
|
|
|
|
what='(st(art|op|atus)|(force-|)re(start|load)|debug_(up|down)|dump(|_stats)|add|delete|clean|list)'
|
|
|
|
read -u0 -k2 magic < $script && [[ $magic = '#!' ]] &&
|
|
cmds=( ${${(j:|:s:|:)${(M)${(f)"$(< $script)"}:#[[:blank:]]#(\'|)${~what}([[:blank:]]#\|[[:blank:]]#${~what})#(\'|)\)}}//[^-a-z_]} )
|
|
|
|
# This would be the pattern to use every line of the form <space>foo).
|
|
# Some people say this might match too many lines...
|
|
#
|
|
# cmds=( ${${(j:|:s:|:)${(M)${(f)"$(< $script)"}:#[[:blank:]]#(\'|)[a-z_|]##\'|)\)}}//[^a-z_]} )
|
|
|
|
(( $#cmds )) || zstyle -a ":completion:${curcontext}:commands" commands cmds ||
|
|
cmds=(start stop)
|
|
|
|
_sub_commands $cmds
|