From 7e7730d176f5037ea7baf7848a91eeb100902f0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Breitbart?= Date: Sun, 7 Jul 2019 21:15:14 +0200 Subject: [PATCH] fix ECH --- src/InputHandler.test.ts | 14 ++++++++++++++ src/InputHandler.ts | 16 ++++++++++------ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/InputHandler.test.ts b/src/InputHandler.test.ts index 2ebac006..4329fa1a 100644 --- a/src/InputHandler.test.ts +++ b/src/InputHandler.test.ts @@ -1048,6 +1048,20 @@ describe('InputHandler', () => { term.writeSync('0123456789\x1b[P'); assert.equal(term.buffer.lines.get(0).translateToString(false), '012345678 '); }); + it('ECH', () => { + term.buffer.x = 10000; + term.buffer.y = 10000; + term.writeSync('\x1b[X'); + assert.deepEqual(getCursor(term), [9, 9]); + term.buffer.x = -10000; + term.buffer.y = -10000; + term.writeSync('\x1b[X'); + assert.deepEqual(getCursor(term), [0, 0]); + }); + it('ECH - should delete last cell', () => { + term.writeSync('0123456789\x1b[X'); + assert.equal(term.buffer.lines.get(0).translateToString(false), '012345678 '); + }); }); }); }); diff --git a/src/InputHandler.ts b/src/InputHandler.ts index 7cb6cd2d..718efcc8 100644 --- a/src/InputHandler.ts +++ b/src/InputHandler.ts @@ -950,12 +950,16 @@ export class InputHandler extends Disposable implements IInputHandler { * Erase Ps Character(s) (default = 1) (ECH). */ public eraseChars(params: IParams): void { - this._terminal.buffer.lines.get(this._terminal.buffer.y + this._terminal.buffer.ybase).replaceCells( - this._terminal.buffer.x, - this._terminal.buffer.x + (params.params[0] || 1), - this._terminal.buffer.getNullCell(this._terminal.eraseAttrData()) - ); - this._terminal.updateRange(this._terminal.buffer.y); + this._restrictCursor(); + const line = this._terminal.buffer.lines.get(this._terminal.buffer.y + this._terminal.buffer.ybase); + if (line) { + line.replaceCells( + this._terminal.buffer.x, + this._terminal.buffer.x + (params.params[0] || 1), + this._terminal.buffer.getNullCell(this._terminal.eraseAttrData()) + ); + this._terminal.updateRange(this._terminal.buffer.y); + } } /**