#compdef vserver _vserver () { # local variables local curcontext="$curcontext" state line expl ret=1 local cmd=$words[3] # dispatch case "$cmd" in apt-cache|apt-config|apt-get) compset -n 3 _dispatch $cmd:t $cmd $cmd:t -default- && ret=0 ;; exec) _arguments -C \ '1: :->vsnames' \ '2: :->cmds' \ '3:command name: _command_names -e' \ '*::arguments: _normal' && ret=0 ;; stop|restart|condrestart|enter|running|status) _arguments -C \ '1: :->vsnames' \ '2: :->cmds' \ '*::arguments: _message "no more arguments"' && ret=0 ;; *) _arguments -C \ '(-)--help[print help information]' \ '(- *)--version[print client version information]' \ '1: :->vsnames' \ '2: :->cmds' \ '*:: :->args' && ret=0 ;; esac # cache initialization if [[ -n "$state" ]]; then if (( ! $+_cache_vserver_cfgdir )); then typeset -g _cache_vserver_cfgdir_initialized _vserver_cache_cfgdir fi if (( ! $+_cache_vserver_vsnames )); then typeset -g _cache_vserver_vsnames_initialized _vserver_cache_vsnames fi if (( ! $+_cache_vserver_cmds )); then typeset -g _cache_vserver_cmds_initialized _vserver_cache_cmds fi fi case "$state" in vsnames) _wanted commands expl 'vserver name' _vserver_vsnames && ret=0 ;; cmds) _wanted commands expl 'vserver command' _vserver_commands && ret=0 ;; args) local args if $+args; then _arguments "$args[@]" && ret=0 else ret=0 fi ;; esac return ret } (( $+functions[_vserver_commands] )) || _vserver_commands() { compadd "$@" -k _cache_vserver_cmds || compadd "$@" ${(s.:.)_cache_vserver_cmds} } (( $+functions[_svk_list_patches] )) || _vserver_vsnames() { local expl _wanted vserver expl 'vserver name' compadd -S '' $_cache_vserver_vsnames[@] } (( $+functions[_vserver_cache_cfgdir] )) || _vserver_cache_cfgdir() { if [[ "$_cache_vserver_cfgdir_initialized" != true ]]; then typeset -ga _cache_vserver_cfgdir _cache_vserver_cfgdir=`vserver-info info SYSINFO | grep '^ *cfg-Directory' | awk '{print $2}'` _cache_vserver_cfgdir_initialized=true fi } (( $+functions[_vserver_cache_vsnames] )) || _vserver_cache_vsnames() { if [[ "$_cache_vserver_vsnames_initialized" != true ]]; then typeset -ga _cache_vserver_vsnames _cache_vserver_vsnames=( $(ls -d $_cache_vserver_cfgdir/*/ | sed -e s,$_cache_vserver_cfgdir,, | tr -d '/') ) _cache_vserver_vsnames_initialized=true fi } (( $+functions[_vserver_cache_cmds] )) || _vserver_cache_cmds() { if [[ "$_cache_vserver_cmds_initialized" != true ]]; then typeset -ga _cache_vserver_cmds _cache_vserver_cmds=( start stop restart condrestart suexec exec enter chkconfig running status build unify pkg apt-get apt-config apt-cache rpm pkgmgmt ) _cache_vserver_cmds_initialized=true fi } _vserver "$@"