diff --git a/src/InputHandler.ts b/src/InputHandler.ts index 71cf0b36a..a15a72135 100644 --- a/src/InputHandler.ts +++ b/src/InputHandler.ts @@ -220,6 +220,8 @@ export class InputHandler extends Disposable implements IInputHandler { this._parser.setCsiHandler({final: 'r'}, params => this.setScrollRegion(params)); this._parser.setCsiHandler({final: 's'}, params => this.saveCursor(params)); this._parser.setCsiHandler({final: 'u'}, params => this.restoreCursor(params)); + this._parser.setCsiHandler({intermediates: "'", final: '}'}, params => this.insertColumns(params)); + this._parser.setCsiHandler({intermediates: "'", final: '~'}, params => this.deleteColumns(params)); /** * execute handler @@ -1096,6 +1098,32 @@ export class InputHandler extends Disposable implements IInputHandler { } } + /** + * CSI Pm ' } + * Insert Ps Column(s) (default = 1) (DECIC), VT420 and up. + */ + public insertColumns(params: IParams): void { + const param = params.params[0] || 1; + for (let y = 0; y < this._bufferService.rows; ++y) { + const line = this._bufferService.buffer.lines.get(this._bufferService.buffer.ybase + y); + line.insertCells(this._bufferService.buffer.x, param, this._bufferService.buffer.getNullCell(this._terminal.eraseAttrData())); + line.isWrapped = false; + } + } + + /** + * CSI Pm ' ~ + * Delete Ps Column(s) (default = 1) (DECDC), VT420 and up. + */ + public deleteColumns(params: IParams): void { + const param = params.params[0] || 1; + for (let y = 0; y < this._bufferService.rows; ++y) { + const line = this._bufferService.buffer.lines.get(this._bufferService.buffer.ybase + y); + line.deleteCells(this._bufferService.buffer.x, param, this._bufferService.buffer.getNullCell(this._terminal.eraseAttrData())); + line.isWrapped = false; + } + } + /** * CSI Ps X * Erase Ps Character(s) (default = 1) (ECH).