Some patterns seen in terminal key escape codes, derived from combos seen\r
at http://www.midnight-commander.org/browser/lib/tty/key.c\r
\r
+ ESC letter\r
ESC [ letter\r
ESC [ modifier letter\r
ESC [ 1 ; modifier letter\r
- two leading ESCs apparently mean the same as one leading ESC\r
*/\r
\r
-// Regex used for ansi escape code splitting\r
-var splitKeyCodeRe =\r
- /^(?:\x1b+)(O|N|\[|\[\[)(?:(\d+)(?:;(\d+))?([~^$])|(?:1;(\d+))?([a-zA-Z]))/;\r
+// Regexes used for ansi escape code splitting\r
+var metaKeyCodeRe = /^(?:\x1b)([a-zA-Z0-9])$/,\r
+ functionKeyCodeRe =\r
+ /^(?:\x1b+)(O|N|\[|\[\[)(?:(\d+)(?:;(\d+))?([~^$])|(?:1;(\d+))?([a-zA-Z]))/;\r
\r
ReadStream.prototype._emitKey = function(s) {\r
var char,\r
key.name = s.toLowerCase();\r
key.shift = true;\r
\r
- } else if (parts = splitKeyCodeRe.exec(s)) {\r
+ } else if (parts = metaKeyCodeRe.exec(s)) {\r
+ // meta+character key\r
+ key.name = parts[1].toLowerCase();\r
+ key.meta = true;\r
+ key.shift = /^[A-Z]$/.test(parts[1]);\r
+\r
+ } else if (parts = functionKeyCodeRe.exec(s)) {\r
// ansi escape sequence\r
\r
// reassemble the key code leaving out leading \x1b's,\r