diff options
Diffstat (limited to 'Completion/Linux')
-rw-r--r-- | Completion/Linux/Command/_vserver | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/Completion/Linux/Command/_vserver b/Completion/Linux/Command/_vserver new file mode 100644 index 000000000..2401387e5 --- /dev/null +++ b/Completion/Linux/Command/_vserver @@ -0,0 +1,131 @@ +#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 "$@" |