#compdef qemu

_qemu_log_items () {
  local -a opts hline
  qemu -d \? | while read -A hline; do
    [[ $hline[1] = Log ]] && continue
    opts=($opts "${hline[1]}[${hline[2,-1]}]")
  done
  _values -s , 'log items' $opts
}

local _qemu_machines

_qemu_machines=(${${${(f)"$(qemu -M \?)"}[2,-1]}%% *})

_arguments \
  '-'{fda,fdb,hda,hdb,hdc,hdd,cdrom}':disk image:_files' \
  '-M[target machine]:machine:('"${_qemu_machines:-none}"')' \
  '-boot[specify which image to boot from]:boot device:((a\:floppy\ image\ a c\:hard\ disk d\:cdrom))' \
  '-snapshot[write to temporary files instead of disk image files]' \
  '-no-fd-bootchk[disable boot sig checking for floppies in Bochs BIOS]' \
  '-m[virtual RAM size (default=128)]:megs:' \
  '-smp[set the number of CPUs (default=1)]:number of CPUs:' \
  '-nographic[disable graphical output]' \
  '-vnc[listen on VNC display]:display:' \
  '-k[use keyboard layout]:keyboard layout language:(ar de-ch es fo fr-ca hu ja mk no pt-br sv da en-gb et fr fr-ch is lt nl pl ru th de en-us fi fr-be hr it lv nl-be pt sl tr)' \
  '-audio-help[show audio subsystem help]' \
  '-soundhw[enable audio and selected sound hardware]:cards to enable:(all)' \
  '-localtime[set rtc to local time]' \
  '-full-screen[start in full screen]' \
  '-pidfile:pidfile:_files' \
  '-win2k-hack' \
  '-usb[enable USB driver]' \
  '-usbdevice:usb device:' \
  '-net:net config:(none)' \
  '-tftp[allow tftp access to files starting with prefix]:tftp prefix:_files' \
  '-smb[allow SMB access to files in specified directory]:samba directory:_path_files -/' \
  '-redir[redirect TCP or UDP connections from host to guest]:redirection: ' \
  '-kernel[boot specified linux kernel]:kernel image:_files' \
  '-append[use specified kernel command line]:command line: ' \
  '-initrd[use specified initial ram disk]:ram disk:_files' \
  '-serial:dev:(vc stdio pty null /dev/ttyS0 /dev/partport0)' \
  '-parallel:dev:(vc stdio pty null /dev/ttyS0 /dev/partport0)' \
  '-monitor:dev:(vc stdio pty null /dev/ttyS0 /dev/partport0)' \
  '-s[wait gdb connection to port 1234]' \
  '-p[change gdb connection port]:port:_ports' \
  '-S[do not start CPU at startup]' \
  '-d[output log in /tmp/qemu.log]:log items:_qemu_log_items' \
  '-hdachs[force hard disk 0 geometry (usually qemu can guess it)]:hd0 geometry c,h,s:' \
  '-std-vga[simulate standard VGA]' \
  '-no-acpi[disable ACPI]' \
  '-loadvm[start right away with a saved state]:file:_files' \
  '-g[set initial graphic mode]:graphic mode:' \
  ':disk image:_files'

