Skip to content

Commit 2e02b52

Browse files
committed
Have terminal service clean up instances using event
1 parent 5094cf0 commit 2e02b52

4 files changed

Lines changed: 13 additions & 16 deletions

File tree

src/vs/workbench/api/node/mainThreadTerminalService.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export class MainThreadTerminalService extends MainThreadTerminalServiceShape {
2626
super();
2727
this._proxy = threadService.get(ExtHostContext.ExtHostTerminalService);
2828
this._toDispose = [];
29-
this._toDispose.push(terminalService.onInstanceClosed((terminalInstance) => this._onTerminalClosed(terminalInstance)));
29+
this._toDispose.push(terminalService.onInstanceDisposed((terminalInstance) => this._onTerminalDisposed(terminalInstance)));
3030
}
3131

3232
public dispose(): void {
@@ -65,7 +65,7 @@ export class MainThreadTerminalService extends MainThreadTerminalServiceShape {
6565
}
6666
}
6767

68-
private _onTerminalClosed(terminalInstance: ITerminalInstance): void {
68+
private _onTerminalDisposed(terminalInstance: ITerminalInstance): void {
6969
this._proxy.$acceptTerminalClosed(terminalInstance.id);
7070
}
7171
}

src/vs/workbench/parts/terminal/electron-browser/terminal.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ export interface ITerminalService {
5858
activeTerminalInstanceIndex: number;
5959
configHelper: TerminalConfigHelper;
6060
onActiveInstanceChanged: Event<string>;
61-
onInstanceClosed: Event<ITerminalInstance>;
61+
onInstanceDisposed: Event<ITerminalInstance>;
6262
onInstancesChanged: Event<string>;
6363
onInstanceTitleChanged: Event<string>;
6464
terminalInstances: ITerminalInstance[];

src/vs/workbench/parts/terminal/electron-browser/terminalInstance.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,11 @@ export class TerminalInstance implements ITerminalInstance {
3131

3232
private _id: number;
3333
private _title: string;
34-
private _onClosed: Emitter<TerminalInstance>;
34+
private _onDisposed: Emitter<TerminalInstance>;
3535
private _onTitleChanged: Emitter<string>;
3636
public get id(): number { return this._id; }
3737
public get title(): string { return this._title; }
38-
public get onClosed(): Event<TerminalInstance> { return this._onClosed.event; }
38+
public get onClosed(): Event<TerminalInstance> { return this._onDisposed.event; }
3939
public get onTitleChanged(): Event<string> { return this._onTitleChanged.event; }
4040

4141
private isExiting: boolean = false;
@@ -49,7 +49,6 @@ export class TerminalInstance implements ITerminalInstance {
4949

5050
public constructor(
5151
private terminalFocusContextKey: IContextKey<boolean>,
52-
private onExitCallback: (TerminalInstance) => void,
5352
private configHelper: TerminalConfigHelper,
5453
private container: HTMLElement,
5554
private workspace: IWorkspace,
@@ -60,7 +59,7 @@ export class TerminalInstance implements ITerminalInstance {
6059
) {
6160
this._id = TerminalInstance.ID_COUNTER++;
6261
this._onTitleChanged = new Emitter<string>();
63-
this._onClosed = new Emitter<TerminalInstance>();
62+
this._onDisposed = new Emitter<TerminalInstance>();
6463
this.createProcess(workspace, name, shell);
6564

6665
if (container) {
@@ -170,10 +169,8 @@ export class TerminalInstance implements ITerminalInstance {
170169
}
171170
this.process = null;
172171
}
173-
this._onClosed.fire(this);
172+
this._onDisposed.fire(this);
174173
this.toDispose = lifecycle.dispose(this.toDispose);
175-
// TODO: Move exit callback to listen onClose event
176-
this.onExitCallback(this);
177174
}
178175

179176
public focus(force?: boolean): void {

src/vs/workbench/parts/terminal/electron-browser/terminalService.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,14 @@ export class TerminalService implements ITerminalService {
2323
private _activeTerminalInstanceIndex: number = 0;
2424
private _configHelper: TerminalConfigHelper;
2525
private _onActiveInstanceChanged: Emitter<string>;
26-
private _onInstanceClosed: Emitter<ITerminalInstance>;
26+
private _onInstanceDisposed: Emitter<ITerminalInstance>;
2727
private _onInstanceTitleChanged: Emitter<string>;
2828
private _onInstancesChanged: Emitter<string>;
2929
private _terminalInstances: ITerminalInstance[] = [];
3030
public get activeTerminalInstanceIndex(): number { return this._activeTerminalInstanceIndex; }
3131
public get configHelper(): TerminalConfigHelper { return this._configHelper; }
3232
public get onActiveInstanceChanged(): Event<string> { return this._onActiveInstanceChanged.event; }
33-
public get onInstanceClosed(): Event<ITerminalInstance> { return this._onInstanceClosed.event; }
33+
public get onInstanceDisposed(): Event<ITerminalInstance> { return this._onInstanceDisposed.event; }
3434
public get onInstanceTitleChanged(): Event<string> { return this._onInstanceTitleChanged.event; }
3535
public get onInstancesChanged(): Event<string> { return this._onInstancesChanged.event; }
3636
public get terminalInstances(): ITerminalInstance[] { return this._terminalInstances; }
@@ -47,11 +47,12 @@ export class TerminalService implements ITerminalService {
4747
@IWorkspaceContextService private workspaceContextService: IWorkspaceContextService
4848
) {
4949
this._onActiveInstanceChanged = new Emitter<string>();
50-
this._onInstanceClosed = new Emitter<ITerminalInstance>();
50+
this._onInstanceDisposed = new Emitter<ITerminalInstance>();
5151
this._onInstancesChanged = new Emitter<string>();
5252
this._onInstanceTitleChanged = new Emitter<string>();
5353
this.terminalFocusContextKey = KEYBINDING_CONTEXT_TERMINAL_FOCUS.bindTo(this.contextKeyService);
5454
this._configHelper = <TerminalConfigHelper>this.instantiationService.createInstance(TerminalConfigHelper, platform.platform);
55+
this.onInstanceDisposed((terminalInstance) => { this.removeInstance(terminalInstance); });
5556
}
5657

5758
public createInstance(name?: string, shellPath?: string, shellArgs?: string[]): ITerminalInstance {
@@ -61,14 +62,13 @@ export class TerminalService implements ITerminalService {
6162
};
6263
let terminalInstance = <TerminalInstance>this.instantiationService.createInstance(TerminalInstance,
6364
this.terminalFocusContextKey,
64-
this.onTerminalInstanceDispose.bind(this),
6565
this._configHelper,
6666
this.terminalContainer,
6767
this.workspaceContextService.getWorkspace(),
6868
name,
6969
shell);
7070
terminalInstance.addDisposable(terminalInstance.onTitleChanged(this._onInstanceTitleChanged.fire, this._onInstanceTitleChanged));
71-
terminalInstance.addDisposable(terminalInstance.onClosed(this._onInstanceClosed.fire, this._onInstanceClosed));
71+
terminalInstance.addDisposable(terminalInstance.onClosed(this._onInstanceDisposed.fire, this._onInstanceDisposed));
7272
this.terminalInstances.push(terminalInstance);
7373
if (this.terminalInstances.length === 1) {
7474
// It's the first instance so it should be made active automatically
@@ -82,7 +82,7 @@ export class TerminalService implements ITerminalService {
8282
return this._terminalInstances.map((instance, index) => `${index + 1}: ${instance.title}`);
8383
}
8484

85-
private onTerminalInstanceDispose(terminalInstance: TerminalInstance): void {
85+
private removeInstance(terminalInstance: ITerminalInstance): void {
8686
let index = this.terminalInstances.indexOf(terminalInstance);
8787
let wasActiveInstance = terminalInstance === this.getActiveInstance();
8888
if (index !== -1) {

0 commit comments

Comments
 (0)