diff --git a/src/common/buffer/Buffer.ts b/src/common/buffer/Buffer.ts index e348ad4c..2d50e8a0 100644 --- a/src/common/buffer/Buffer.ts +++ b/src/common/buffer/Buffer.ts @@ -44,7 +44,7 @@ export class Buffer implements IBuffer { private _whitespaceCell: ICellData = CellData.fromCharData([0, WHITESPACE_CELL_CHAR, WHITESPACE_CELL_WIDTH, WHITESPACE_CELL_CODE]); private _cols: number; private _rows: number; - private _state: string | undefined; + private _isClearing: boolean = false; constructor( private _hasScrollback: boolean, @@ -587,12 +587,12 @@ export class Buffer implements IBuffer { } public clearMarkers(): void { - this._state = BufferState.CLEARING; + this._isClearing = true; for (const marker of this.markers) { marker.dispose(); } this.markers = []; - this._state = undefined; + this._isClearing = false; } public addMarker(y: number): Marker { @@ -626,7 +626,7 @@ export class Buffer implements IBuffer { } private _removeMarker(marker: Marker): void { - if (this._state !== BufferState.CLEARING) { + if (!this._isClearing) { this.markers.splice(this.markers.indexOf(marker), 1); } } diff --git a/test/api/Terminal.api.ts b/test/api/Terminal.api.ts index 2b0c00d4..1fe75456 100644 --- a/test/api/Terminal.api.ts +++ b/test/api/Terminal.api.ts @@ -559,6 +559,29 @@ describe('API Integration Tests', function(): void { assert.equal(await page.evaluate(`window.term.buffer.active.getLine(0).getCell(2).getChars()`), ''); assert.equal(await page.evaluate(`window.term.buffer.active.getLine(0).getCell(2).getWidth()`), 0); }); + + it('clearMarkers', async () => { + await openTerminal(page, { cols: 5 }); + await page.evaluate(` + window.disposeStack = []; + `); + await writeSync(page, '\\n\\n\\n\\n'); + await writeSync(page, '\\n\\n\\n\\n'); + await writeSync(page, '\\n\\n\\n\\n'); + await writeSync(page, '\\n\\n\\n\\n'); + await page.evaluate(`window.term.addMarker(1)`); + await page.evaluate(`window.term.addMarker(2)`); + await page.evaluate(`window.term.scrollLines(10)`); + await page.evaluate(`window.term.addMarker(3)`); + await page.evaluate(`window.term.addMarker(4)`); + await page.evaluate(` + for (let i = 0; i < window.term.markers.length; ++i) { + const marker = window.term.markers[i]; + marker.onDispose(() => window.disposeStack.push(marker)); + }`); + await page.evaluate(`window.term.clear()`); + assert.equal(await page.evaluate(`window.disposeStack.length`), 4); + }); }); it('active, normal, alternate', async () => {