_mkswu()
{
	local cur prev words cword split
	local word mode="" options
	_init_completion || return
	case "$prev" in
	-o|--out)
		_filedir
		return
		;;
	--version-base|--version-cmp|--version|--help|-h)
		return
		;;
	-c|--config)
		_filedir 'conf'
		return
		;;
	--config-dir)
		_filedir -d
		return
		;;
	esac
	for word in "${words[@]}"; do
		case "$word" in
		--genkey) mode=genkey;;
		--aes) mode=genkey_aes;;
		--init) mode=init;;
		--import) mode=import;;
		--show) mode=show;;
		--update-version) mode=update_version;;
		esac
	done

	options="-c --config --config-dir -v --verbose -q --quiet -h --help --version"
	case "$mode" in
	genkey) options+=" --aes --cn --plain";;
	genkey_aes|init|import) :;;
	show) options+=" --raw";;
	update_version) options+=" --version-base";;
	"") options+=" -o --out --init --import --genkey --show --update-version --version-cmp";;
	esac
	COMPREPLY=($(compgen -W "$options" -- "$cur"))
	case "$mode" in
	show) _filedir 'swu';;
	""|update_version) _filedir 'desc';;
	esac
} && complete -F _mkswu mkswu
