Align browser registerMarker alt-buffer guard with headless

Block registerMarker on the alternate buffer in CoreBrowserTerminal,
matching headless addMarker behavior. Update public typings to
IMarker | undefined and add regression tests.

Fixes #5937

Co-authored-by: Daniel Imms <Tyriar@users.noreply.github.com>
This commit is contained in:
Cursor Agent
2026-05-27 18:22:33 +00:00
co-authored by Daniel Imms
parent 2ab0f10a26
commit e331541fd1
8 changed files with 46 additions and 15 deletions
+6 -1
View File
@@ -768,7 +768,12 @@ export class CoreBrowserTerminal extends CoreTerminal implements ITerminal {
return this.buffer.markers;
}
public registerMarker(cursorYOffset: number): IMarker {
public registerMarker(cursorYOffset: number): IMarker | undefined {
// Disallow markers on the alt buffer
if (this.buffer !== this.buffers.normal) {
return;
}
return this.buffer.addMarker(this.buffer.ybase + this.buffer.y + cursorYOffset);
}
+10
View File
@@ -1146,6 +1146,16 @@ describe('Terminal', () => {
assert.equal(termConverting.buffer.lines.get(1)!.translateToString(true), 'World');
});
describe('registerMarker', () => {
it('should return undefined on the alt buffer', async () => {
assert.isDefined(term.registerMarker(0));
await term.writeP('\x1b[?47h');
assert.isUndefined(term.registerMarker(0));
await term.writeP('\x1b[?47l');
assert.isDefined(term.registerMarker(0));
});
});
// FIXME: move to common/CoreTerminal.test once the trimming is moved over
describe('marker lifecycle', () => {
// create a 10x5 terminal with markers on every line
+1 -1
View File
@@ -166,7 +166,7 @@ export class Terminal extends Disposable implements ITerminalApi {
public deregisterCharacterJoiner(joinerId: number): void {
this._core.deregisterCharacterJoiner(joinerId);
}
public registerMarker(cursorYOffset: number = 0): IMarker {
public registerMarker(cursorYOffset: number = 0): IMarker | undefined {
this._verifyIntegers(cursorYOffset);
return this._core.registerMarker(cursorYOffset);
}
+12
View File
@@ -419,6 +419,18 @@ describe('Headless API Tests', function (): void {
strictEqual(term.buffer.normal.getLine(0)!.translateToString(), 'norm ');
strictEqual(term.buffer.alternate.getLine(0), undefined);
});
it('registerMarker returns undefined on the alt buffer', async () => {
term = new Terminal({ cols: 5, allowProposedApi: true });
strictEqual(term.buffer.active.type, 'normal');
strictEqual(term.registerMarker(0)!.line, 0);
await writeSync('\x1b[?47h');
strictEqual(term.buffer.active.type, 'alternate');
strictEqual(term.registerMarker(0), undefined);
await writeSync('\x1b[?47l');
strictEqual(term.buffer.active.type, 'normal');
strictEqual(term.registerMarker(0)!.line, 0);
});
});
describe('modes', () => {