1
0
mirror of git://git.code.sf.net/p/zsh/code synced 2024-09-29 07:21:58 +02:00
zsh/Completion/Linux/Command/_vserver
2006-04-29 04:47:12 +00:00

132 lines
3.0 KiB
Plaintext

#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 "$@"