--- zsh-5.3/Completion/Unix/Command/_init_d +++ zsh-5.3/Completion/Unix/Command/_init_d @@ -1,6 +1,6 @@ #compdef -p */(init|rc[0-9S]#).d/* -local cmds script +local cmds script opts local -a flags _compskip=all @@ -102,10 +102,18 @@ script=$words[1] [[ $script = */* ]] || script="$(_init_d_fullpath "$script")" +[[ ! -f $script ]] && + { _message "${words[1]:t} is not an init script" && return } + cmds=( $(_init_d_get_cmds) ) || return 1 -(( $#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) _arguments -s -A "-*" $flags ':init.d command:_sub_commands $cmds'