about summary refs log tree commit diff
path: root/Completion/Linux/Command
diff options
context:
space:
mode:
Diffstat (limited to 'Completion/Linux/Command')
-rw-r--r--Completion/Linux/Command/.distfiles2
-rw-r--r--Completion/Linux/Command/_uml147
2 files changed, 148 insertions, 1 deletions
diff --git a/Completion/Linux/Command/.distfiles b/Completion/Linux/Command/.distfiles
index 20549b37e..5968b219d 100644
--- a/Completion/Linux/Command/.distfiles
+++ b/Completion/Linux/Command/.distfiles
@@ -1,4 +1,4 @@
 DISTFILES_SRC='
 .distfiles
-_losetup _modutils _mondo _valgrind
+_losetup _modutils _mondo _uml _valgrind
 '
diff --git a/Completion/Linux/Command/_uml b/Completion/Linux/Command/_uml
new file mode 100644
index 000000000..453cb625e
--- /dev/null
+++ b/Completion/Linux/Command/_uml
@@ -0,0 +1,147 @@
+#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]'
+  ;;
+  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' && return
+  ;;
+  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})'
+  ;;
+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]:terminam 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