diff --git a/addons/xterm-addon-search/src/SearchAddon.ts b/addons/xterm-addon-search/src/SearchAddon.ts index 4a1a6ef0..1f1ff961 100644 --- a/addons/xterm-addon-search/src/SearchAddon.ts +++ b/addons/xterm-addon-search/src/SearchAddon.ts @@ -144,6 +144,8 @@ export class SearchAddon implements ITerminalAddon { if (!this._terminal) { throw new Error('Cannot use addon until it has been loaded'); } + this._resultDecorations.forEach(d => d.dispose()); + this._resultDecorations = []; if (!term || term.length === 0) { this._terminal.clearSelection(); @@ -388,13 +390,19 @@ export class SearchAddon implements ITerminalAddon { terminal.clearSelection(); return; } - // TODO: - const marker = terminal.registerMarker(undefined, result.col, result.row); + const marker = terminal.registerMarker(undefined, result.row - 1); if (!marker) { return undefined; } const findResultDecoration = terminal.registerDecoration({ marker, width: result.size }); - findResultDecoration?.onRender((e) => console.log('rendered', e, result?.term, result?.col)); + findResultDecoration?.onRender((e) => { + console.log('rendered', e, result?.term, result?.row); + e.style.backgroundColor = 'blue'; + e.style.color = 'white'; + e.style.opacity = '60%'; + // TODO: use cell width here instead of 10 + e.style.left = `${(result.col === 0 ? 0 : result.col - 1) * 10}px`; + }); return findResultDecoration; } } diff --git a/src/browser/Terminal.ts b/src/browser/Terminal.ts index 08963933..69d5bfad 100644 --- a/src/browser/Terminal.ts +++ b/src/browser/Terminal.ts @@ -993,12 +993,15 @@ export class Terminal extends CoreTerminal implements ITerminal { return this.buffer.markers; } - public addMarker(cursorYOffset: number): IMarker | undefined { + public addMarker(cursorYOffset: number, row?: number): IMarker | undefined { // Disallow markers on the alt buffer if (this.buffer !== this.buffers.normal) { return; } - + if (row) { + console.log(row); + return this.buffer.addMarker(row + 1); + } return this.buffer.addMarker(this.buffer.ybase + this.buffer.y + cursorYOffset); } diff --git a/src/browser/Types.d.ts b/src/browser/Types.d.ts index 35b52d62..c66b0928 100644 --- a/src/browser/Types.d.ts +++ b/src/browser/Types.d.ts @@ -60,7 +60,7 @@ export interface IPublicTerminal extends IDisposable { registerLinkProvider(linkProvider: ILinkProvider): IDisposable; registerCharacterJoiner(handler: (text: string) => [number, number][]): number; deregisterCharacterJoiner(joinerId: number): void; - addMarker(cursorYOffset: number): IMarker | undefined; + addMarker(cursorYOffset: number, col?: number, row?: number): IMarker | undefined; registerDecoration(decorationOptions: IDecorationOptions): IDecoration | undefined; hasSelection(): boolean; getSelection(): string; diff --git a/src/browser/public/Terminal.ts b/src/browser/public/Terminal.ts index 1acde934..8c290fda 100644 --- a/src/browser/public/Terminal.ts +++ b/src/browser/public/Terminal.ts @@ -166,10 +166,13 @@ export class Terminal implements ITerminalApi { this._checkProposedApi(); this._core.deregisterCharacterJoiner(joinerId); } - public registerMarker(cursorYOffset: number = 0): IMarker | undefined { + public registerMarker(cursorYOffset: number = 0, row?: number): IMarker | undefined { this._checkProposedApi(); this._verifyIntegers(cursorYOffset); - return this._core.addMarker(cursorYOffset); + if (row) { + this._verifyPositiveIntegers(row); + } + return this._core.addMarker(cursorYOffset, row); } public registerDecoration(decorationOptions: IDecorationOptions): IDecoration | undefined { this._checkProposedApi(); diff --git a/typings/xterm.d.ts b/typings/xterm.d.ts index 44106354..cc6dc8ad 100644 --- a/typings/xterm.d.ts +++ b/typings/xterm.d.ts @@ -930,7 +930,7 @@ declare module 'xterm' { * @param cursorYOffset The y position offset of the marker from the cursor. * @returns The new marker or undefined. */ - registerMarker(cursorYOffset?: number, col?: number, row?: number): IMarker | undefined; + registerMarker(cursorYOffset?: number, row?: number): IMarker | undefined; /** * @deprecated use `registerMarker` instead.