# (C) 2010 magicant

# Completion script for the "bindkey" built-in command.

function completion/bindkey {

	typeset OPTIONS ARGOPT PREFIX
	OPTIONS=( #>#
	"a --vi-command; change or print vi-command-mode key bindings"
	"e --emacs; change or print emacs-mode key bindings"
	"l --list; print all key binding command names"
	"v --vi-insert; change or print vi-insert-mode key bindings"
	"--help"
	) #<#

	command -f completion//parseoptions -es
	case $ARGOPT in
	(-)
		command -f completion//completeoptions
		;;
	(*)
		command -f completion//getoperands
		if [ ${WORDS[#]} -le 0 ]; then
			# complete a key sequence
			TARGETWORD=${TARGETWORD//\\\\/}
			case $TARGETWORD in (*\\*)
				PREFIX=${TARGETWORD%\\*}
				#>>#
				complete -T -P "$PREFIX" '\\' -D "backslash"
				complete -T -P "$PREFIX" '\B' -D "backspace"
				complete -T -P "$PREFIX" '\D' -D "down arrow"
				complete -T -P "$PREFIX" '\E' -D "end"
				complete -T -P "$PREFIX" '\H' -D "home"
				complete -T -P "$PREFIX" '\I' -D "insert"
				complete -T -P "$PREFIX" '\L' -D "left arrow"
				complete -T -P "$PREFIX" '\N' -D "page-down"
				complete -T -P "$PREFIX" '\P' -D "page-up"
				complete -T -P "$PREFIX" '\R' -D "right arrow"
				complete -T -P "$PREFIX" '\U' -D "up arrow"
				complete -T -P "$PREFIX" '\X' -D "delete"
				complete -T -P "$PREFIX" '\!' -D "INTR (normally Ctrl-C)"
				complete -T -P "$PREFIX" '\#' -D "EOF (normally Ctrl-D)"
				complete -T -P "$PREFIX" '\$' -D "KILL (normally Ctrl-U)"
				complete -T -P "$PREFIX" '\?' -D "ERASE (normally Ctrl-H)"
				complete -T -P "$PREFIX" '\^@' -D "Ctrl-@"
				complete -T -P "$PREFIX" '\^A' -D "Ctrl-A"
				complete -T -P "$PREFIX" '\^B' -D "Ctrl-B"
				complete -T -P "$PREFIX" '\^C' -D "Ctrl-C"
				complete -T -P "$PREFIX" '\^D' -D "Ctrl-D"
				complete -T -P "$PREFIX" '\^E' -D "Ctrl-E"
				complete -T -P "$PREFIX" '\^F' -D "Ctrl-F"
				complete -T -P "$PREFIX" '\^G' -D "Ctrl-G"
				complete -T -P "$PREFIX" '\^H' -D "Ctrl-H"
				complete -T -P "$PREFIX" '\^I' -D "Ctrl-I (tab)"
				complete -T -P "$PREFIX" '\^J' -D "Ctrl-J (newline)"
				complete -T -P "$PREFIX" '\^K' -D "Ctrl-K"
				complete -T -P "$PREFIX" '\^L' -D "Ctrl-L"
				complete -T -P "$PREFIX" '\^M' -D "Ctrl-M (carriage return)"
				complete -T -P "$PREFIX" '\^N' -D "Ctrl-N"
				complete -T -P "$PREFIX" '\^O' -D "Ctrl-O"
				complete -T -P "$PREFIX" '\^P' -D "Ctrl-P"
				complete -T -P "$PREFIX" '\^Q' -D "Ctrl-Q"
				complete -T -P "$PREFIX" '\^R' -D "Ctrl-R"
				complete -T -P "$PREFIX" '\^S' -D "Ctrl-S"
				complete -T -P "$PREFIX" '\^T' -D "Ctrl-T"
				complete -T -P "$PREFIX" '\^U' -D "Ctrl-U"
				complete -T -P "$PREFIX" '\^V' -D "Ctrl-V"
				complete -T -P "$PREFIX" '\^W' -D "Ctrl-W"
				complete -T -P "$PREFIX" '\^X' -D "Ctrl-X"
				complete -T -P "$PREFIX" '\^Y' -D "Ctrl-Y"
				complete -T -P "$PREFIX" '\^Z' -D "Ctrl-Z"
				complete -T -P "$PREFIX" '\^[' -D "Ctrl-[ (escape)"
				complete -T -P "$PREFIX" '\^\' -D 'Ctrl-\'
				complete -T -P "$PREFIX" '\^]' -D "Ctrl-]"
				complete -T -P "$PREFIX" '\^^' -D "Ctrl-^"
				complete -T -P "$PREFIX" '\^_' -D "Ctrl-_"
				complete -T -P "$PREFIX" '\^?' -D "Ctrl-?"
				complete -T -P "$PREFIX" '\F00' -D "F0"
				complete -T -P "$PREFIX" '\F01' -D "F1"
				complete -T -P "$PREFIX" '\F02' -D "F2"
				complete -T -P "$PREFIX" '\F03' -D "F3"
				complete -T -P "$PREFIX" '\F04' -D "F4"
				complete -T -P "$PREFIX" '\F05' -D "F5"
				complete -T -P "$PREFIX" '\F06' -D "F6"
				complete -T -P "$PREFIX" '\F07' -D "F7"
				complete -T -P "$PREFIX" '\F08' -D "F8"
				complete -T -P "$PREFIX" '\F09' -D "F9"
				complete -T -P "$PREFIX" '\F10' -D "F10"
				complete -T -P "$PREFIX" '\F11' -D "F11"
				complete -T -P "$PREFIX" '\F12' -D "F12"
				complete -T -P "$PREFIX" '\F13' -D "F13"
				complete -T -P "$PREFIX" '\F14' -D "F14"
				complete -T -P "$PREFIX" '\F15' -D "F15"
				complete -T -P "$PREFIX" '\F16' -D "F16"
				complete -T -P "$PREFIX" '\F17' -D "F17"
				complete -T -P "$PREFIX" '\F18' -D "F18"
				complete -T -P "$PREFIX" '\F19' -D "F19"
				complete -T -P "$PREFIX" '\F20' -D "F20"
				complete -T -P "$PREFIX" '\F21' -D "F21"
				complete -T -P "$PREFIX" '\F22' -D "F22"
				complete -T -P "$PREFIX" '\F23' -D "F23"
				complete -T -P "$PREFIX" '\F24' -D "F24"
				complete -T -P "$PREFIX" '\F25' -D "F25"
				complete -T -P "$PREFIX" '\F26' -D "F26"
				complete -T -P "$PREFIX" '\F27' -D "F27"
				complete -T -P "$PREFIX" '\F28' -D "F28"
				complete -T -P "$PREFIX" '\F29' -D "F29"
				complete -T -P "$PREFIX" '\F30' -D "F30"
				complete -T -P "$PREFIX" '\F31' -D "F31"
				complete -T -P "$PREFIX" '\F32' -D "F32"
				complete -T -P "$PREFIX" '\F33' -D "F33"
				complete -T -P "$PREFIX" '\F34' -D "F34"
				complete -T -P "$PREFIX" '\F35' -D "F35"
				complete -T -P "$PREFIX" '\F36' -D "F36"
				complete -T -P "$PREFIX" '\F37' -D "F37"
				complete -T -P "$PREFIX" '\F38' -D "F38"
				complete -T -P "$PREFIX" '\F39' -D "F39"
				complete -T -P "$PREFIX" '\F40' -D "F40"
				complete -T -P "$PREFIX" '\F41' -D "F41"
				complete -T -P "$PREFIX" '\F42' -D "F42"
				complete -T -P "$PREFIX" '\F43' -D "F43"
				complete -T -P "$PREFIX" '\F44' -D "F44"
				complete -T -P "$PREFIX" '\F45' -D "F45"
				complete -T -P "$PREFIX" '\F46' -D "F46"
				complete -T -P "$PREFIX" '\F47' -D "F47"
				complete -T -P "$PREFIX" '\F48' -D "F48"
				complete -T -P "$PREFIX" '\F49' -D "F49"
				complete -T -P "$PREFIX" '\F50' -D "F50"
				complete -T -P "$PREFIX" '\F51' -D "F51"
				complete -T -P "$PREFIX" '\F52' -D "F52"
				complete -T -P "$PREFIX" '\F53' -D "F53"
				complete -T -P "$PREFIX" '\F54' -D "F54"
				complete -T -P "$PREFIX" '\F55' -D "F55"
				complete -T -P "$PREFIX" '\F56' -D "F56"
				complete -T -P "$PREFIX" '\F57' -D "F57"
				complete -T -P "$PREFIX" '\F58' -D "F58"
				complete -T -P "$PREFIX" '\F59' -D "F59"
				complete -T -P "$PREFIX" '\F60' -D "F60"
				complete -T -P "$PREFIX" '\F61' -D "F61"
				complete -T -P "$PREFIX" '\F62' -D "F62"
				complete -T -P "$PREFIX" '\F63' -D "F63"
				complete -T -P "$PREFIX" '\a1' -D "keypad upper-left"
				complete -T -P "$PREFIX" '\a3' -D "keypad upper-right"
				complete -T -P "$PREFIX" '\b2' -D "keypad center"
				complete -T -P "$PREFIX" '\c1' -D "keypad lower-left"
				complete -T -P "$PREFIX" '\c3' -D "keypad lower-right"
				complete -T -P "$PREFIX" '\ca' -D "clear all tabs"
				complete -T -P "$PREFIX" '\cl' -D "close"
				complete -T -P "$PREFIX" '\cn' -D "cancel"
				complete -T -P "$PREFIX" '\co' -D "command"
				complete -T -P "$PREFIX" '\cp' -D "copy"
				complete -T -P "$PREFIX" '\cr' -D "create"
				complete -T -P "$PREFIX" '\cs' -D "clear screen"
				complete -T -P "$PREFIX" '\ct' -D "clear tab"
				complete -T -P "$PREFIX" '\dl' -D "delete line"
				complete -T -P "$PREFIX" '\ei' -D "exit insert mode"
				complete -T -P "$PREFIX" '\el' -D "clear to end of line"
				complete -T -P "$PREFIX" '\es' -D "clear to end of screen"
				complete -T -P "$PREFIX" '\et' -D "enter (send)"
				complete -T -P "$PREFIX" '\fd' -D "find"
				complete -T -P "$PREFIX" '\hp' -D "help"
				complete -T -P "$PREFIX" '\il' -D "insert line"
				complete -T -P "$PREFIX" '\ll' -D "home down"
				complete -T -P "$PREFIX" '\me' -D "message"
				complete -T -P "$PREFIX" '\mk' -D "mark"
				complete -T -P "$PREFIX" '\ms' -D "mouse event"
				complete -T -P "$PREFIX" '\mv' -D "move"
				complete -T -P "$PREFIX" '\nx' -D "next object"
				complete -T -P "$PREFIX" '\on' -D "open"
				complete -T -P "$PREFIX" '\op' -D "options"
				complete -T -P "$PREFIX" '\pr' -D "print (copy)"
				complete -T -P "$PREFIX" '\pv' -D "previous object"
				complete -T -P "$PREFIX" '\rd' -D "redo"
				complete -T -P "$PREFIX" '\re' -D "resume"
				complete -T -P "$PREFIX" '\rf' -D "reference"
				complete -T -P "$PREFIX" '\rh' -D "refresh"
				complete -T -P "$PREFIX" '\rp' -D "replace"
				complete -T -P "$PREFIX" '\rs' -D "restart"
				complete -T -P "$PREFIX" '\sf' -D "scroll forward"
				complete -T -P "$PREFIX" '\sl' -D "select"
				complete -T -P "$PREFIX" '\sr' -D "scroll backward"
				complete -T -P "$PREFIX" '\st' -D "set tab"
				complete -T -P "$PREFIX" '\su' -D "suspend"
				complete -T -P "$PREFIX" '\sv' -D "save"
				complete -T -P "$PREFIX" '\ud' -D "undo"
				complete -T -P "$PREFIX" '\SE' -D "shift + end"
				complete -T -P "$PREFIX" '\SH' -D "shift + home"
				complete -T -P "$PREFIX" '\SI' -D "shift + insert"
				complete -T -P "$PREFIX" '\SL' -D "shift + left arrow"
				complete -T -P "$PREFIX" '\SR' -D "shift + right arrow"
				complete -T -P "$PREFIX" '\SX' -D "shift + delete"
				complete -T -P "$PREFIX" '\Sbg' -D "shift + beginning"
				complete -T -P "$PREFIX" '\Scn' -D "shift + cancel"
				complete -T -P "$PREFIX" '\Sco' -D "shift + command"
				complete -T -P "$PREFIX" '\Scp' -D "shift + copy"
				complete -T -P "$PREFIX" '\Scr' -D "shift + create"
				complete -T -P "$PREFIX" '\Sdl' -D "shift + delete line"
				complete -T -P "$PREFIX" '\Sel' -D "shift + end of line"
				complete -T -P "$PREFIX" '\Sex' -D "shift + exit"
				complete -T -P "$PREFIX" '\Sfd' -D "shift + find"
				complete -T -P "$PREFIX" '\Shp' -D "shift + help"
				complete -T -P "$PREFIX" '\Smg' -D "shift + message"
				complete -T -P "$PREFIX" '\Smv' -D "shift + move"
				complete -T -P "$PREFIX" '\Snx' -D "shift + next"
				complete -T -P "$PREFIX" '\Sop' -D "shift + options"
				complete -T -P "$PREFIX" '\Spr' -D "shift + print"
				complete -T -P "$PREFIX" '\Spv' -D "shift + previous"
				complete -T -P "$PREFIX" '\Srd' -D "shift + redo"
				complete -T -P "$PREFIX" '\Sre' -D "shift + resume"
				complete -T -P "$PREFIX" '\Srp' -D "shift + replace"
				complete -T -P "$PREFIX" '\Ssu' -D "shift + suspend"
				complete -T -P "$PREFIX" '\Ssv' -D "shift + save"
				complete -T -P "$PREFIX" '\Sud' -D "shift + undo"
				#<<#
			esac
		else
			complete --bindkey -- -
		fi
		;;
	esac

}


# vim: set ft=sh ts=8 sts=8 sw=8 noet:
