mirror of
git://git.code.sf.net/p/zsh/code
synced 2024-11-19 13:33:52 +01:00
150 lines
5.1 KiB
Plaintext
150 lines
5.1 KiB
Plaintext
#compdef linux uml_moo uml_mconsole uml_switch tunctl
|
|
|
|
local curcontext="$curcontext" state st line expl suf ret=1
|
|
typeset -A opt_args
|
|
|
|
case $service in
|
|
uml_moo)
|
|
_arguments '1:COW file:_files -g "*cow*(-.)"' '2:new backing file:_files'
|
|
return
|
|
;;
|
|
uml_switch)
|
|
_arguments \
|
|
'-unix[listen on specified pair of sockets]:control socket: :data socket' \
|
|
'-hub[act like a hub]'
|
|
return
|
|
;;
|
|
uml_mconsole)
|
|
if (( CURRENT == 2 )); then
|
|
_wanted socket expl 'socket name' compadd {~/.uml,/tmp}/*/mconsole(N=:h:t) && ret=0
|
|
elif [[ $words[CURRENT-1] = config ]]; then
|
|
if [[ -prefix ubd || -prefix eth ]]; then
|
|
state=option
|
|
else
|
|
_wanted device expl device compadd -S '' ubd eth && ret=0
|
|
fi
|
|
elif [[ $words[CURRENT-1] = remove ]]; then
|
|
_wanted device expl device compadd ubd{0..7} eth{0..9} && ret=0
|
|
elif (( CURRENT == 3 )); then
|
|
_values 'command' \
|
|
'version[print the UML kernel version number]' \
|
|
'help[print help]' \
|
|
'halt[shutdown UML system immediately]' \
|
|
'reboot[reboot the UML system immediately]' \
|
|
'config[add a new device to the virtual machine]' \
|
|
'remove[delete a device from the virtual machine]' \
|
|
'sysrq[perform sysrq action]:key:((r\:turn\ of\ keyboard\ raw\ mode k\:secure\ access\ key b\:reboot o\:shutdown s\:sync u\:remount p\:dump\ registers t\:dump\ tasks m\:dump\ memory e\:SIGTERM\ to\ all i\:SIGKILL\ to\ all l\:SIGKILL\ to\ all\ inc.\ init h\:help {0..9}\:console\ log\ level))' \
|
|
'cad[invoke ctrl-alt-del handler]' \
|
|
'stop[pause the UML]' \
|
|
'go[continue the UML]' \
|
|
&& ret=0
|
|
else
|
|
_message 'no more arguments'
|
|
fi
|
|
;;
|
|
linux)
|
|
_arguments -C \
|
|
'(* -)--version[display kernel version number]' \
|
|
'(* -)--help[print usage information]' \
|
|
'(* -)--showconfig[show kernel configuration]' \
|
|
'(-)*:option:->option' && ret=0
|
|
;;
|
|
tunctl)
|
|
_arguments \
|
|
'(-d)-b[brief output]' \
|
|
'-f[specify tun clone device]:tun clone device:_files' \
|
|
'(-d)-u[specify owner]:owner:_users' \
|
|
'(-b -u -t)-d[specify devicename to delete]:device name:(tap{0..9})' \
|
|
'(-d)-t[specify devicename]:device name:(tap{0..9})'
|
|
return
|
|
;;
|
|
esac
|
|
|
|
while [[ -n $state ]]; do
|
|
st=$state
|
|
unset state
|
|
case $st in
|
|
option)
|
|
if compset -P '(ssl|con)[0-9]#='; then
|
|
state=channel
|
|
continue
|
|
elif compset -P con; then
|
|
_message -e consoles 'console number'
|
|
return
|
|
elif compset -P ssl; then
|
|
_message -e serial 'serial line number'
|
|
return
|
|
elif compset -P 'ubd[0-7](|r)(|s)='; then
|
|
compset -P '*,'
|
|
_files && return
|
|
elif compset -P ubd; then
|
|
_message -e devices 'device number'
|
|
return
|
|
elif compset -P 'eth[0-9]##='; then
|
|
if compset -P 1 '*,'; then
|
|
_message -e options option
|
|
else
|
|
_wanted transports expl transports compadd -S, \
|
|
ethertap tuntap daemon mcast slip && return
|
|
fi
|
|
return
|
|
elif compset -P eth; then
|
|
_message -e ethernet number
|
|
return
|
|
fi
|
|
compadd -n -S '' con ssl ubd eth && ret=0
|
|
_values -C -w "option" \
|
|
'mem[specify amount of "physical" memory to allocate]:memory' \
|
|
'iomem[configure file as named IO memory region]:arg:->iomem' \
|
|
'gdb[attach gdb to specified channel]:channel:->channel' \
|
|
'gdb-pid[specify pid of debugger]:debugger pid:_pids' \
|
|
'debugtrace[cause tracing thread to wait for debugger]' \
|
|
'honeypot[put process stacks in the same location as on host]' \
|
|
'debug[start kernel under gdb control]' \
|
|
'root[specify root filesystem]:root device' \
|
|
'umid[specify name for this UML machine]:name' \
|
|
'uml_dir[location to place pid and umid files]:directory:_directories' \
|
|
'initrd[boot from initrd image]:initrd file:_files' \
|
|
'jail[enable protection of kernel memory from processes]' \
|
|
'*con[attach a console to a host channel]:channel:->channel' \
|
|
'*ssl[attach a serial line to a host channel]:channel:->channel' \
|
|
'fake_ide[create ide0 entries which map onto ubd devices]' \
|
|
'*ubd[associate device with host file]' \
|
|
'fakehd[change the ubd device name to "hd"]' \
|
|
'*eth[configure a network device]' \
|
|
'ncpus[specify number of virtual processors to start]:processors' \
|
|
'mode[force UML to run in specified mode]:mode:(tt)' \
|
|
'mconsole[request mconsole driver to send a message to socket]:socket' \
|
|
'xterm[specify alternate terminal emulator]:terminal emulator:->xterm' \
|
|
'dsp[specify host dsp device]:dsp device:_files' \
|
|
'mixer[specify host mixer device]:mixer device:_files' \
|
|
'umn[specify ip address for host side of slip device]' && ret=0
|
|
;;
|
|
iomem)
|
|
if compset -P '*,'; then
|
|
_files && ret=0
|
|
else
|
|
_message -e name
|
|
fi
|
|
;;
|
|
channel)
|
|
compset -P '*,' || suf=( -S , )
|
|
_values -S : ${suf/S/s} "channel" \
|
|
pty pts xterm \
|
|
'tty:tty:_files $suf' \
|
|
"fd:file descriptor:_file_descriptors $suf" && ret=0
|
|
;;
|
|
xterm)
|
|
if compset -P 2 '*,'; then
|
|
_wanted -x argument expl 'execute switch' compadd - -e -x && ret=0
|
|
elif compset -P 1 '*,'; then
|
|
_wanted -x argument expl 'title switch' compadd -S , - -t -T -title && ret=0
|
|
else
|
|
_wanted command expl 'terminal emulator' _command_names -e -S , && ret=0
|
|
fi
|
|
;;
|
|
esac
|
|
done
|
|
|
|
return ret
|