Skip to content

Commit 6a23276

Browse files
committed
borrow emitter ctor from xterm
1 parent f516346 commit 6a23276

2 files changed

Lines changed: 21 additions & 12 deletions

File tree

addons/addon-progress/src/ProgressAddon.ts

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,9 @@
33
* @license MIT
44
*/
55

6-
import type { Terminal, ITerminalAddon } from '@xterm/xterm';
6+
import type { Terminal, ITerminalAddon, IDisposable } from '@xterm/xterm';
77
import type { ProgressAddon as IProgressApi, IProgress } from '@xterm/addon-progress';
8-
import { Emitter } from 'vs/base/common/event';
9-
import { Disposable } from 'vs/base/common/lifecycle';
8+
import type { Emitter, Event } from 'vs/base/common/event';
109

1110

1211
export const enum ProgressState {
@@ -34,14 +33,20 @@ function toInt(s: string): number {
3433
}
3534

3635

37-
export class ProgressAddon extends Disposable implements ITerminalAddon, IProgressApi {
36+
export class ProgressAddon implements ITerminalAddon, IProgressApi {
37+
private _seqHandler: IDisposable | undefined;
3838
private _st: ProgressState = ProgressState.REMOVE;
3939
private _pr = 0;
40-
private readonly _onChange = this._register(new Emitter<IProgress>());
41-
public readonly onChange = this._onChange.event;
40+
private _onChange: Emitter<IProgress> | undefined;
41+
public onChange: Event<IProgress> | undefined;
42+
43+
public dispose(): void {
44+
this._seqHandler?.dispose();
45+
this._onChange?.dispose();
46+
}
4247

4348
public activate(terminal: Terminal): void {
44-
this._register(terminal.parser.registerOscHandler(9, data => {
49+
this._seqHandler = terminal.parser.registerOscHandler(9, data => {
4550
if (!data.startsWith('4;')) {
4651
return false;
4752
}
@@ -74,7 +79,10 @@ export class ProgressAddon extends Disposable implements ITerminalAddon, IProgre
7479
break;
7580
}
7681
return true;
77-
}));
82+
});
83+
// FIXME: borrow emitter ctor from xterm, to be changed once #5283 is resolved
84+
this._onChange = new (terminal as any)._core._onData.constructor();
85+
this.onChange = this._onChange!.event;
7886
}
7987

8088
public get progress(): IProgress {
@@ -88,6 +96,6 @@ export class ProgressAddon extends Disposable implements ITerminalAddon, IProgre
8896
}
8997
this._st = progress.state;
9098
this._pr = Math.min(Math.max(progress.value, 0), 100);
91-
this._onChange.fire({ state: this._st, value: this._pr });
99+
this._onChange?.fire({ state: this._st, value: this._pr });
92100
}
93101
}

addons/addon-progress/typings/addon-progress.d.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,18 @@
33
* @license MIT
44
*/
55

6-
import { Terminal, ITerminalAddon, IDisposable, IEvent } from '@xterm/xterm';
6+
import { Terminal, ITerminalAddon, IDisposable } from '@xterm/xterm';
7+
import type { Event } from 'vs/base/common/event';
78
import type { ProgressState } from '../src/ProgressAddon';
89

910
declare module '@xterm/addon-progress' {
1011
/** xterm.js addon providing an interface for ConEmu's progress sequence */
11-
export class ProgressAddon implements ITerminalAddon {
12+
export class ProgressAddon implements ITerminalAddon, IDisposable {
1213
constructor();
1314
public activate(terminal: Terminal): void;
1415
public dispose(): void;
1516

16-
public readonly onChange: IEvent<IProgress>;
17+
public readonly onChange: Event<IProgress> | undefined;
1718

1819
/** getter / setter for current progress */
1920
public progress: IProgress;

0 commit comments

Comments
 (0)