use utf8;

{
key => {
	'+<' => "history start",
	'+>' => "history end",
	'+?' => "list complet<>ion<>s",
	'^@' => "set mark",

	'+#' => "prefix comm<>en<>t",
	'+&' => "tilde expand",
	'+*' => "complet<>e all",
	'+.' => "insert last",

	'^[' => "meta",
	'+\\'=> "delete whitesp<>ace",
	'^]' => "find char",
	'^+]'=> "rev find char",
	'^_' => "undo",

	'+~' => "user<>name exp<>and",
	'+!' => "cmd expand",
	'+@' => "host<>name exp<>and",
	'+$' => "variable expand",
	'+^' => "history expand",
	'+/' => "filename expand",

	'^a' => "begin of line",
	'^b' => "char back<>w<>ard<>s",
	'+b' => "word back<>w<>ard<>s",
	'^c' => "cancel comm<>and",
	'+c' => "capital<>ise word",
	'^d' => "delete char",
	'+d' => "delete word rem<>ain<>der",
#	'^e' => "emacs mode",
	'^e' => "end of line",
	'^f' => "char forward",
	'+f' => "word forward",
	'^g' => "abort cmd, bell",
	'^h' => "back<>space",
	'^+h'=> "delete bound word",
	'^i' => "auto<>complet<>e\n(tab)",
	'^+j'=> "vim mode",
	'^k' => "delete till eol",
	'^l' => "clear screen",
	'+l' => "lowcase word",
	'^m' => "enter line\n(enter)",
	'^n' => "history next",
	'+n' => "match history",
	'^o' => "enter and next",
	'^p' => "history back",
	'+p' => "rev match history",
#	'^q' => "\nQuote",  #TODO fix partial override
	'^r' => "reverse history",
	'+r' => "full undo\nRevert",
	'^s' => "search history",
	'^t' => "move char forw<>ard\nTranspose char",
	'+t' => "move word forw<>ard\nTranspose word",
	'^u' => "delete till bol", # unix
	'+u' => "upcase word",
	'^v' => "verbat<>im char",
	'^w' => "delete word", # unix
	'^x' => "extend<>ed",
	'^y' => "yank top",
	'+y' => "rotate yank",
	'^+y'=> "yank arg",
	'^z' => "back<>ground",

	'^x('  => "start macro",
	'^x)'  => "end macro",
	'^xe'  => "run macro\nExecute",
	'^x^e' => "editor",
	'^x^r' => "reload inputrc",
	'^x^x' => "swap cursor\neXchange",
	'^x^v' => "shell version",

	# globally label escape as meta key
	  "\e" => "+",
	"^x\e" => "+",
},

mode => {
	''   => "emacs mode",
	'^x' => "emacs ctrl-x bindings",
},

flag => {
	g1 => [info    => "Info command: shows/does something without altering anything."],
	g2 => [motion  => "Move the cursor."],
	g4 => [history => "Replace contents involving kill ring, undo, or command history."],
	g6 => [change  => "Alter current text (filtering or completion)."],
	g7 => [delete  => "Remove text."],
	g8 => [misc    => "Miscellaneous commands."],
	g9 => [mode    => "Additional key functionality (click to view)."],

	arg => ["key<arg>" => "Commands with a dot need a char argument afterwards."],
	'v21 new' => ["&gt;v2.0" => "Unavailable before readline version 2.1 (1997)."],
	'xbash ext' => ["bash" => "Default assignment in Bash shells, but not common readline."],
},

def => {
	'' => {
		"\e" => 'g8',

		'+<' => 'g4',
		'+=' => '=+?', #TODO: v21 # emacs, not in v2.0
		'+>' => 'g4',
		'^?' => '=^h',
		'+?' => 'g1',
		'^@' => 'g8 v21', # not in v2.0

		'+#' => 'g6 v21', # not in v2.0
		'+&' => 'g6',
		'+*' => 'g6 v21', # not in v2.0
		'+.' => 'g4',
		'+~' => '=+&amp;', # emacs

		'^[' => 'g8',
		'^+['=> '=^i',
		'+\\'=> 'g7',
		'^]' => 'g2 arg v21', # not in v2.0
		'^+]'=> 'g2 arg v21', # not in v2.0
		'^_' => 'g4',
		'+_' => '=+.',

		'+~' => 'g6 xbash', # common emacs => '=+&'
		'+!' => 'g6 xbash',
		'+@' => 'g6 xbash',
		'+$' => 'g6 xbash',
		'+^' => 'g4 xbash',
		'+/' => 'g1 xbash',

		'^a' => 'g2',
		'^b' => 'g2',
		'+b' => 'g2',
		'^c' => 'g8 xbash',
		'+c' => 'g6',
		'^d' => 'g7',
		'+d' => 'g7 ring',
	#	'^e' => 'g9',
		'^e' => 'g2',
		'^f' => 'g2',
		'+f' => 'g2',
		'^g' => 'g8',
		'^+g'=> '=^g',
		'^h' => 'g7',
		'^+h'=> 'g7 ring', #TODO
		'^i' => 'g6',
		'^+i'=> '=^v^i',
		'^j' => '=^m',
		'^+j'=> 'g9', #TODO: mode^+j
		'^k' => 'g7 ring',
		'^l' => 'g1',
		'+l' => 'g6',
		'^m' => 'g4',
		'^+m'=> '=^+j',
		'^n' => 'g4',
		'+n' => 'g4',
		'^o' => 'g4 xbash',
		'^p' => 'g4',
		'+p' => 'g4',
		'^q' => '=^v',
		'^r' => 'g4',
		'+r' => 'g4',
		'^+r'=> '=+r',
		'^s' => 'g4',
		'^t' => 'g6',
		'+t' => 'g6',
		'^u' => 'g7 ring',
		'+u' => 'g6',
		'^v' => 'g8',
		'^w' => 'g7 ring',
		'^x' => 'g9 arg mode^x',
		'^y' => 'g4',
		'+y' => 'g4 ring',
		'^+y'=> "yank arg",
		'^z' => 'g8 xbash',
	},

	'^x' => {
		lead => "x̂",

		"\e" => 'g8 mode',

		'('  => 'g8',
		')'  => 'g8',
		'e'  => 'g8',
		'^e' => 'g6 xbash linkvi',
		'^g' => '=^g',
		'^h' => '=^u',
		'^r' => 'g8',
		'^u' => '=^_',
		'^x' => 'g2 v21', # not in v2.0
		'^v' => 'g1 xbash',
		'^?' => '=^x^h',
	},
},
}
