Fixed missing ansi codes causing formatting misses

This commit is contained in:
Nathan Byrd 2023-09-24 20:39:57 +00:00
parent 72a8546d74
commit 450ba65565
2 changed files with 18 additions and 11 deletions

View File

@ -12,7 +12,6 @@ const _ = require('lodash');
exports.ANSIEscapeParser = ANSIEscapeParser; exports.ANSIEscapeParser = ANSIEscapeParser;
const TAB = 0x09;
const CR = 0x0d; const CR = 0x0d;
const LF = 0x0a; const LF = 0x0a;
@ -25,7 +24,7 @@ function ANSIEscapeParser(options) {
this.graphicRendition = {}; this.graphicRendition = {};
this.parseState = { this.parseState = {
re: /(?:\x1b)(?:(?:\x5b([?=;0-9]*?)([ABCDEFGfHJKLmMsSTuUYZ]))|([78DEHM]))/g, // eslint-disable-line no-control-regex re: /(?:\x1b)(?:(?:\x5b([?=;0-9]*?)([ABCDEFGfHJKLmMsSTuUYZt@PX]))|([78DEHM]))/g, // eslint-disable-line no-control-regex
}; };
options = miscUtil.valueWithDefault(options, { options = miscUtil.valueWithDefault(options, {
@ -111,14 +110,6 @@ function ANSIEscapeParser(options) {
charCode = text.charCodeAt(pos) & 0xff; // 8bit clean charCode = text.charCodeAt(pos) & 0xff; // 8bit clean
switch (charCode) { switch (charCode) {
case TAB:
self.emit('literal', text.slice(start, pos + 1));
start = pos + 1;
self.column += 8 - ((self.column - 1) % 8);
self.positionUpdated();
break;
case CR: case CR:
self.emit('literal', text.slice(start, pos + 1)); self.emit('literal', text.slice(start, pos + 1));
start = pos + 1; start = pos + 1;
@ -255,7 +246,7 @@ function ANSIEscapeParser(options) {
self.parseState = { self.parseState = {
// ignore anything past EOF marker, if any // ignore anything past EOF marker, if any
buffer: input.split(String.fromCharCode(0x1a), 1)[0], buffer: input.split(String.fromCharCode(0x1a), 1)[0],
re: /(?:\x1b)(?:(?:\x5b([?=;0-9]*?)([ABCDEFGfHJKLmMsSTuUYZ]))|([78DEHM]))/g, // eslint-disable-line no-control-regex re: /(?:\x1b)(?:(?:\x5b([?=;0-9]*?)([ABCDEFGfHJKLmMsSTuUYZt@PX]))|([78DEHM]))/g, // eslint-disable-line no-control-regex
stop: false, stop: false,
}; };
}; };
@ -585,6 +576,11 @@ function ANSIEscapeParser(options) {
self.column = Math.max( 1, self.column - (self.column % 8 || 8) ); self.column = Math.max( 1, self.column - (self.column % 8 || 8) );
self.positionUpdated(); self.positionUpdated();
break; break;
case '@':
// insert column(s)
arg = isNaN(args[0]) ? 1 : args[0];
self.emit('insert columns', self.row, self.column, arg);
break;
} }
} }

View File

@ -338,6 +338,17 @@ function display(client, art, options, cb) {
}); });
}); });
ansiParser.on('insert columns', (row, startCol, numCols) => {
_.forEach(mciMap, (mciInfo, mapKey) => {
if (mciInfo.position[0] === row && mciInfo.position[1] >= startCol) {
mciInfo.position[1] += numCols;
if(mciInfo.position[1] > client.term.termWidth) {
delete mciMap[mapKey];
}
}
});
});
// Clear the screen, removing any MCI's // Clear the screen, removing any MCI's
ansiParser.on('clear screen', () => { ansiParser.on('clear screen', () => {
_.forEach(mciMap, (mciInfo, mapKey) => { _.forEach(mciMap, (mciInfo, mapKey) => {