Skip to content

Commit

Permalink
Merge pull request #3628 from meganrogge/merogge/marker-clear
Browse files Browse the repository at this point in the history
  • Loading branch information
meganrogge authored Feb 5, 2022
2 parents a63890e + 494aef1 commit a13f11a
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 1 deletion.
1 change: 1 addition & 0 deletions src/browser/Terminal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1293,6 +1293,7 @@ export class Terminal extends CoreTerminal implements ITerminal {
// Don't clear if it's already clear
return;
}
this.buffer.clearMarkers();
this.buffer.lines.set(0, this.buffer.lines.get(this.buffer.ybase + this.buffer.y)!);
this.buffer.lines.length = 1;
this.buffer.ydisp = 0;
Expand Down
3 changes: 3 additions & 0 deletions src/browser/TestUtils.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -254,6 +254,9 @@ export class MockBuffer implements IBuffer {
public getWhitespaceCell(attr?: IAttributeData): ICellData {
throw new Error('Method not implemented.');
}
public clearMarkers(): void {
throw new Error('Method not implemented.');
}
}

export class MockRenderer implements IRenderer {
Expand Down
14 changes: 13 additions & 1 deletion src/common/buffer/Buffer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,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 _isClearing: boolean = false;

constructor(
private _hasScrollback: boolean,
Expand Down Expand Up @@ -584,6 +585,15 @@ export class Buffer implements IBuffer {
return x >= this._cols ? this._cols - 1 : x < 0 ? 0 : x;
}

public clearMarkers(): void {
this._isClearing = true;
for (const marker of this.markers) {
marker.dispose();
}
this.markers = [];
this._isClearing = false;
}

public addMarker(y: number): Marker {
const marker = new Marker(y);
this.markers.push(marker);
Expand Down Expand Up @@ -615,7 +625,9 @@ export class Buffer implements IBuffer {
}

private _removeMarker(marker: Marker): void {
this.markers.splice(this.markers.indexOf(marker), 1);
if (!this._isClearing) {
this.markers.splice(this.markers.indexOf(marker), 1);
}
}

public iterator(trimRight: boolean, startIndex?: number, endIndex?: number, startOverscan?: number, endOverscan?: number): IBufferStringIterator {
Expand Down
1 change: 1 addition & 0 deletions src/common/buffer/Types.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ export interface IBuffer {
getNullCell(attr?: IAttributeData): ICellData;
getWhitespaceCell(attr?: IAttributeData): ICellData;
addMarker(y: number): IMarker;
clearMarkers(): void;
}

export interface IBufferSet extends IDisposable {
Expand Down
23 changes: 23 additions & 0 deletions test/api/Terminal.api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 () => {
Expand Down

0 comments on commit a13f11a

Please sign in to comment.