From 6a232765f454149bd82dbc1f235e935b154b4766 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Breitbart?= Date: Tue, 7 Jan 2025 21:22:40 +0100 Subject: [PATCH] borrow emitter ctor from xterm --- addons/addon-progress/src/ProgressAddon.ts | 26 ++++++++++++------- .../typings/addon-progress.d.ts | 7 ++--- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/addons/addon-progress/src/ProgressAddon.ts b/addons/addon-progress/src/ProgressAddon.ts index c1468a51..465cff47 100644 --- a/addons/addon-progress/src/ProgressAddon.ts +++ b/addons/addon-progress/src/ProgressAddon.ts @@ -3,10 +3,9 @@ * @license MIT */ -import type { Terminal, ITerminalAddon } from '@xterm/xterm'; +import type { Terminal, ITerminalAddon, IDisposable } from '@xterm/xterm'; import type { ProgressAddon as IProgressApi, IProgress } from '@xterm/addon-progress'; -import { Emitter } from 'vs/base/common/event'; -import { Disposable } from 'vs/base/common/lifecycle'; +import type { Emitter, Event } from 'vs/base/common/event'; export const enum ProgressState { @@ -34,14 +33,20 @@ function toInt(s: string): number { } -export class ProgressAddon extends Disposable implements ITerminalAddon, IProgressApi { +export class ProgressAddon implements ITerminalAddon, IProgressApi { + private _seqHandler: IDisposable | undefined; private _st: ProgressState = ProgressState.REMOVE; private _pr = 0; - private readonly _onChange = this._register(new Emitter()); - public readonly onChange = this._onChange.event; + private _onChange: Emitter | undefined; + public onChange: Event | undefined; + + public dispose(): void { + this._seqHandler?.dispose(); + this._onChange?.dispose(); + } public activate(terminal: Terminal): void { - this._register(terminal.parser.registerOscHandler(9, data => { + this._seqHandler = terminal.parser.registerOscHandler(9, data => { if (!data.startsWith('4;')) { return false; } @@ -74,7 +79,10 @@ export class ProgressAddon extends Disposable implements ITerminalAddon, IProgre break; } return true; - })); + }); + // FIXME: borrow emitter ctor from xterm, to be changed once #5283 is resolved + this._onChange = new (terminal as any)._core._onData.constructor(); + this.onChange = this._onChange!.event; } public get progress(): IProgress { @@ -88,6 +96,6 @@ export class ProgressAddon extends Disposable implements ITerminalAddon, IProgre } this._st = progress.state; this._pr = Math.min(Math.max(progress.value, 0), 100); - this._onChange.fire({ state: this._st, value: this._pr }); + this._onChange?.fire({ state: this._st, value: this._pr }); } } diff --git a/addons/addon-progress/typings/addon-progress.d.ts b/addons/addon-progress/typings/addon-progress.d.ts index ba3d0da2..874e4a13 100644 --- a/addons/addon-progress/typings/addon-progress.d.ts +++ b/addons/addon-progress/typings/addon-progress.d.ts @@ -3,17 +3,18 @@ * @license MIT */ -import { Terminal, ITerminalAddon, IDisposable, IEvent } from '@xterm/xterm'; +import { Terminal, ITerminalAddon, IDisposable } from '@xterm/xterm'; +import type { Event } from 'vs/base/common/event'; import type { ProgressState } from '../src/ProgressAddon'; declare module '@xterm/addon-progress' { /** xterm.js addon providing an interface for ConEmu's progress sequence */ - export class ProgressAddon implements ITerminalAddon { + export class ProgressAddon implements ITerminalAddon, IDisposable { constructor(); public activate(terminal: Terminal): void; public dispose(): void; - public readonly onChange: IEvent; + public readonly onChange: Event | undefined; /** getter / setter for current progress */ public progress: IProgress;