From a99b55abb524e82b91a1b51c591213aa6a55d05b Mon Sep 17 00:00:00 2001 From: Nathan Byrd Date: Tue, 19 Sep 2023 01:04:36 +0000 Subject: [PATCH] Added support for some non-bracket escape sequences --- core/ansi_escape_parser.js | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/core/ansi_escape_parser.js b/core/ansi_escape_parser.js index 3b376c89..4d30c29c 100644 --- a/core/ansi_escape_parser.js +++ b/core/ansi_escape_parser.js @@ -24,7 +24,7 @@ function ANSIEscapeParser(options) { this.graphicRendition = {}; this.parseState = { - re: /(?:\x1b\x5b)([?=;0-9]*?)([ABCDHJKfhlmnpsutEFGST])/g, // eslint-disable-line no-control-regex + re: /(?:\x1b)(\x5b?)([?=;0-9]*?)([ABCDEfHJLmMsSTuUYZ])/g, // eslint-disable-line no-control-regex }; options = miscUtil.valueWithDefault(options, { @@ -232,7 +232,7 @@ function ANSIEscapeParser(options) { self.parseState = { // ignore anything past EOF marker, if any buffer: input.split(String.fromCharCode(0x1a), 1)[0], - re: /(?:\x1b\x5b)([?=;0-9]*?)([ABCDHJKfhlmnpsutEFGST])/g, // eslint-disable-line no-control-regex + re: /(?:\x1b)(\x5b?)([?=;0-9]*?)([ABCDEfHJLmMsSTuUYZ])/g, // eslint-disable-line no-control-regex stop: false, }; }; @@ -269,8 +269,25 @@ function ANSIEscapeParser(options) { parseMCI(buffer.slice(pos, match.index)); } - opCode = match[2]; - args = match[1].split(';').map(v => parseInt(v, 10)); // convert to array of ints + opCode = match[3]; + args = match[2].split(';').map(v => parseInt(v, 10)); // convert to array of ints + + if(_.isNil(match[1])) { + // no bracket + switch(opCode) { + // scroll up + case 'D': + opCode = 'S'; + args = [1]; + break; + + // scroll down + case 'M': + opCode = 'T'; + args = [1]; + break; + } + } escape(opCode, args);