# -*- mode: shell-script; sh-basic-offset: 8; indent-tabs-mode: t -*-
# ex: ts=8 sw=8 noet filetype=sh
#
# bash completion for qemu

have qemu &&
_qemu()
{
	local cur prev

	COMPREPLY=()
	cur=`_get_cword`
	prev=${COMP_WORDS[COMP_CWORD-1]}

	case $prev in
		-@(fd[ab]|hd[abcd]|cdrom|option-rom|kernel|initrd|bootp|pidfile|loadvm|mtdblock|sd|pflash|bios))
			_filedir
			return 0
			;;
		-@(tftp|smb|L|chroot))
			_filedir -d
			return 0
			;;
		-boot)
			COMPREPLY=( $( compgen -W 'a c d n' -- $cur ) )
			return 0
			;;
		-k)
			COMPREPLY=( $( compgen -W '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' -- $cur ) )
			return 0
			;;
		-soundhw)
			COMPREPLY=( $( compgen -W "$( qemu -soundhw ? | awk \
				'/^[[:lower:]]/ {print $1}' ) all" -- $cur ) )
			return 0
			;;
		-M)
			COMPREPLY=( $( compgen -W "$( qemu -M ? | awk \
				'/^[[:lower:]]/ {print $1}' )" -- $cur ) )
			return 0
			;;
		-cpu)
			COMPREPLY=( $( compgen -W "$( qemu -cpu ? | awk \
				'{print $2}' )" -- $cur ) )
			return 0
			;;
		-usbdevice)
			COMPREPLY=( $( compgen -W 'mouse tablet disk: host: \
				serial: braille net' -- $cur ) )
			return 0
			;;
		-net)
			COMPREPLY=( $( compgen -W 'nic user tap socket vde none dump' \
				-- $cur ) )
			return 0
			;;
		-@(serial|parallel|monitor))
			COMPREPLY=( $( compgen -W 'vc pty none null /dev/ \
				file: stdio pipe: COM udp: tcp: telnet: unix: \
				mon: braille' -- $cur ) )
			return 0
			;;
		-redir)
			COMPREPLY=( $( compgen -S":" -W 'tcp udp' -- $cur ) )
			return 0
			;;
		-bt)
			COMPREPLY=( $( compgen -W 'hci vhci device' -- $cur ) )
			return 0
			;;
		-vga)
			COMPREPLY=( $( compgen -W 'cirrus std vmware xenfb none' -- $cur ) )
			return 0
			;;
		-drive)
			COMPREPLY=( $( compgen -S"=" -W 'file if bus unit index media \
				cyls snapshot cache format serial addr' -- $cur	) )
			return 0
			;;
		-ballon)
			COMPREPLY=( $( compgen -W 'none virtio' -- $cur ) )
			return 0
			;;
		-smbios)
			COMPREPLY=( $( compgen -W 'file type' -- $cur ) )
			return 0
			;;
		-watchdog)
			COMPREPLY=( $( compgen -W "$( qemu -watchdog ? 2>&1 | awk '{print $1}' )" -- $cur ) )
			return 0
			;;
		-watchdog-action)
			COMPREPLY=( $( compgen -W 'reset shutdown poweroff pause \
			debug none' -- $cur ) )
			return 0
			;;
		-runas)
			COMPREPLY=( $( compgen -u -- $cur ) )
			return 0
			;;
	esac


	if [[ "$cur" == -* ]]; then
		COMPREPLY=( $( compgen -W '-M -fda -fdb -hda -hdb -hdc -hdd \
		-cdrom -boot -snapshot -no-fd-bootchk -m -smp -nographic -vnc \
		-k -audio-help -soundhw -localtime -full-screen -pidfile \
		-daemonize -win2k-hack -option-rom -usb -usbdevice -net -tftp \
		-smb -redir -kernel -append -initrd -serial -parallel -monitor \
		-s -p -S -d -hdachs -L -std-vga -no-acpi -no-reboot -loadvm \
		-semihosting -cpu -bt -vga -drive -startdate -name -curses \
		-no-frame -no-quit -bootp -echr -no-shutdown -icount -g \
		-prom-env -h -help -version -numa -mtdblock -sd -pflash \
		-device -uuid -alt-grab -sdl -portrait -rtc-td-hack -no-hpet \
		-balloon -acpitable -smbios -singlestep -gdb -hdachs -bios \
		-kernel-kqemu -enable-kqemu -enable-kvm -clock -watchdog \
		-watchdog-action -virtioconsole -show-cursor -tb-size -incoming \
		-chroot -runas' -- $cur ) )
	else
		_filedir
	fi
} &&
complete -F _qemu $filenames qemu
