diff -urN zsh-4.2.4.ORIG/Completion/Unix/Command/_init_d zsh-4.2.4/Completion/Unix/Command/_init_d --- zsh-4.2.4.ORIG/Completion/Unix/Command/_init_d 2003-05-12 19:10:51.000000000 +0900 +++ zsh-4.2.4/Completion/Unix/Command/_init_d 2005-02-22 22:32:42.162337888 +0900 @@ -1,6 +1,6 @@ #compdef -p */(init|rc[0-9S]#).d/* -local magic cmds what script +local magic cmds what script opts _compskip=all @@ -8,6 +8,8 @@ script=$words[1] [[ $script = */* ]] || script=/etc/init.d/$script +[[ ! -f $script ]] && + { _message "${words[1]:t} is not an init script" && return } # If the file starts with `#!' we hope that this is a shell script # and get lines looking like foo|bar) with the words in $what. @@ -22,7 +24,12 @@ # # cmds=( ${${(j:|:s:|:)${(M)${(f)"$(< $script)"}:#[[:blank:]]#(\'|)[a-z_|]##\'|)\)}}//[^a-z_]} ) -(( $#cmds )) || zstyle -a ":completion:${curcontext}:commands" commands cmds || - cmds=(start stop) +(( $#cmds )) || zstyle -a ":completion:${curcontext}:commands" commands cmds +opts=(start stop restart pause zap status ineed iuse needsme usesme broken) + +# If we didn't get $cmds from a zstyle, then read init script for opts. +# If script doesn't specify opts, then default to the standard opts. +(( $#cmds )) || cmds=( ${(eQz)${(M)${(f)"$( <$script)"}:#[[:blank:]]#opts=*}#*=} ) +(( $#cmds )) || cmds=($opts) _sub_commands $cmds