diff --git a/lib/readline.js b/lib/readline.js index 6164bcc85fb8ff..815b86e9f52a80 100644 --- a/lib/readline.js +++ b/lib/readline.js @@ -973,8 +973,9 @@ exports.emitKeypressEvents = emitKeypressEvents; */ // Regexes used for ansi escape code splitting -const metaKeyCodeReAnywhere = /(?:\x1b)([a-zA-Z0-9])/; -const functionKeyCodeReAnywhere = new RegExp('(?:\x1b+)(O|N|\\[|\\[\\[)(?:' + [ +const metaKeyCodeReAnywhere = /(?:(?:\x1b|\x9b))([a-zA-Z0-9])/; +const functionKeyCodeReAnywhere = new RegExp('(?:(?:\x1b|\x9b)+)' + + '(O|N|\\[|\\[\\[)(?:' + [ '(\\d+)(?:;(\\d+))?([~^$])', '(?:M([@ #!a`])(.)(.))', // mouse '(?:1;)?(\\d+)?([a-zA-Z])' @@ -994,11 +995,11 @@ function* emitKeys(stream) { shift: false }; - if (ch === '\x1b') { + if (ch === '\x1b' || ch === '\x9b') { escaped = true; s += (ch = yield); - if (ch === '\x1b') { + if (ch === '\x1b' || ch === '\x9b') { s += (ch = yield); } } @@ -1219,7 +1220,7 @@ function* emitKeys(stream) { key.name = 'backspace'; key.meta = escaped; - } else if (ch === '\x1b') { + } else if (ch === '\x1b' || ch === '\x9b') { // escape key key.name = 'escape'; key.meta = escaped;