Implement onRender in xterm-headless

This effectively enabled implementing an efficient renderer on top
of xterm-headless. See #5392
This commit is contained in:
Daniel Imms
2025-12-26 11:19:59 -08:00
parent 9453634f56
commit a26471b9f3
5 changed files with 24 additions and 2 deletions
+3
View File
@@ -65,6 +65,8 @@ export abstract class CoreTerminal extends Disposable implements ICoreTerminal {
public readonly onData = this._onData.event;
protected _onLineFeed = this._register(new Emitter<void>());
public readonly onLineFeed = this._onLineFeed.event;
protected readonly _onRender = this._register(new Emitter<{ start: number, end: number }>());
public readonly onRender = this._onRender.event;
private readonly _onResize = this._register(new Emitter<{ cols: number, rows: number }>());
public readonly onResize = this._onResize.event;
protected readonly _onWriteParsed = this._register(new Emitter<void>());
@@ -124,6 +126,7 @@ export abstract class CoreTerminal extends Disposable implements ICoreTerminal {
// Register input handler and handle/forward events
this._inputHandler = this._register(new InputHandler(this._bufferService, this._charsetService, this.coreService, this._logService, this.optionsService, this._oscLinkService, this.coreMouseService, this.unicodeService));
this._register(Event.forward(this._inputHandler.onLineFeed, this._onLineFeed));
this._register(Event.forward(Event.map(this._inputHandler.onRequestRefreshRows, e => ({ start: e?.start ?? 0, end: e?.end ?? this.rows - 1 })), this._onRender));
this._register(this._inputHandler);
// Setup listeners