Skip to content

Commit 321cb28

Browse files
committed
Remove terminalTab dependency on electron-browser
1 parent a6f0ec3 commit 321cb28

10 files changed

Lines changed: 34 additions & 22 deletions

File tree

src/vs/workbench/api/electron-browser/mainThreadTerminalService.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ export class MainThreadTerminalService implements MainThreadTerminalServiceShape
5555
ignoreConfigurationCwd: true,
5656
env
5757
};
58-
return TPromise.as(this.terminalService.createInstance(shellLaunchConfig).id);
58+
return TPromise.as(this.terminalService.createTerminal(shellLaunchConfig).id);
5959
}
6060

6161
public $show(terminalId: number, preserveFocus: boolean): void {

src/vs/workbench/parts/debug/electron-browser/terminalSupport.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ export class TerminalLauncher implements ITerminalLauncher {
4242

4343
let t = this.integratedTerminalInstance;
4444
if ((t && this.isBusy(t)) || !t) {
45-
t = this.terminalService.createInstance({ name: args.title || nls.localize('debug.terminal.title', "debuggee") });
45+
t = this.terminalService.createTerminal({ name: args.title || nls.localize('debug.terminal.title', "debuggee") });
4646
this.integratedTerminalInstance = t;
4747
}
4848
this.terminalService.setActiveInstance(t);

src/vs/workbench/parts/execution/electron-browser/execution.contribution.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ CommandsRegistry.registerCommand({
9191
const directoriesToOpen = distinct(stats.map(({ stat }) => stat.isDirectory ? stat.resource.fsPath : paths.dirname(stat.resource.fsPath)));
9292
return directoriesToOpen.map(dir => {
9393
if (configurationService.getValue<ITerminalConfiguration>().terminal.explorerKind === 'integrated') {
94-
const instance = integratedTerminalService.createInstance({ cwd: dir }, true);
94+
const instance = integratedTerminalService.createTerminal({ cwd: dir }, true);
9595
if (instance && (resources.length === 1 || !resource || dir === resource.fsPath || dir === paths.dirname(resource.fsPath))) {
9696
integratedTerminalService.setActiveInstance(instance);
9797
integratedTerminalService.showPanel(true);

src/vs/workbench/parts/tasks/electron-browser/terminalTaskSystem.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -571,7 +571,7 @@ export class TerminalTaskSystem implements ITaskSystem {
571571
return [terminalToReuse.terminal, commandExecutable];
572572
}
573573

574-
const result = this.terminalService.createInstance(shellLaunchConfig);
574+
const result = this.terminalService.createTerminal(shellLaunchConfig);
575575
const terminalKey = result.id.toString();
576576
result.onDisposed((terminal) => {
577577
let terminalData = this.terminals[terminalKey];

src/vs/workbench/parts/terminal/common/terminal.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,17 @@ export interface ITerminalService {
156156
terminalInstances: ITerminalInstance[];
157157
terminalTabs: ITerminalTab[];
158158

159-
createInstance(shell?: IShellLaunchConfig, wasNewTerminalAction?: boolean): ITerminalInstance;
159+
/**
160+
* Creates a terminal.
161+
* @param shell The shell launch configuration to use.
162+
* @param wasNewTerminalAction Whether this was triggered by a new terminal action, if so a
163+
* default shell selection dialog may display.
164+
*/
165+
createTerminal(shell?: IShellLaunchConfig, wasNewTerminalAction?: boolean): ITerminalInstance;
166+
/**
167+
* Creates a raw terminal instance, this should not be used outside of the terminal part.
168+
*/
169+
createInstance(terminalFocusContextKey: IContextKey<boolean>, configHelper: ITerminalConfigHelper, container: HTMLElement, shellLaunchConfig: IShellLaunchConfig, doCreateProcess: boolean): ITerminalInstance;
160170
getInstanceFromId(terminalId: number): ITerminalInstance;
161171
getInstanceFromIndex(terminalIndex: number): ITerminalInstance;
162172
getTabLabels(): string[];

src/vs/workbench/parts/terminal/common/terminalService.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,8 @@ export abstract class TerminalService implements ITerminalService {
7575
}
7676

7777
protected abstract _showTerminalCloseConfirmation(): TPromise<boolean>;
78-
public abstract createInstance(shell?: IShellLaunchConfig, wasNewTerminalAction?: boolean): ITerminalInstance;
78+
public abstract createTerminal(shell?: IShellLaunchConfig, wasNewTerminalAction?: boolean): ITerminalInstance;
79+
public abstract createInstance(terminalFocusContextKey: IContextKey<boolean>, configHelper: ITerminalConfigHelper, container: HTMLElement, shellLaunchConfig: IShellLaunchConfig, doCreateProcess: boolean): ITerminalInstance;
7980
public abstract getActiveOrCreateInstance(wasNewTerminalAction?: boolean): ITerminalInstance;
8081
public abstract selectDefaultWindowsShell(): TPromise<string>;
8182
public abstract setContainers(panelContainer: HTMLElement, terminalContainer: HTMLElement): void;
@@ -96,7 +97,7 @@ export abstract class TerminalService implements ITerminalService {
9697
}
9798

9899
tabConfigs.forEach(tabConfig => {
99-
const instance = this.createInstance(tabConfig.instances[0]);
100+
const instance = this.createTerminal(tabConfig.instances[0]);
100101
for (let i = 1; i < tabConfig.instances.length; i++) {
101102
this.splitInstance(instance, tabConfig.instances[i]);
102103
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ export class ToggleTerminalAction extends TogglePanelAction {
4646
if (this.terminalService.terminalInstances.length === 0) {
4747
// If there is not yet an instance attempt to create it here so that we can suggest a
4848
// new shell on Windows (and not do so when the panel is restored on reload).
49-
const newTerminalInstance = this.terminalService.createInstance(undefined, true);
49+
const newTerminalInstance = this.terminalService.createTerminal(undefined, true);
5050
const toDispose = newTerminalInstance.onProcessIdReady(() => {
5151
newTerminalInstance.focus();
5252
toDispose.dispose();
@@ -258,7 +258,7 @@ export class CreateNewTerminalAction extends Action {
258258
if (folders.length <= 1) {
259259
// Allow terminal service to handle the path when there is only a
260260
// single root
261-
instancePromise = TPromise.as(this.terminalService.createInstance(undefined, true));
261+
instancePromise = TPromise.as(this.terminalService.createTerminal(undefined, true));
262262
} else {
263263
const options: IPickOptions = {
264264
placeHolder: nls.localize('workbench.action.terminal.newWorkspacePlaceholder', "Select current working directory for new terminal")
@@ -268,7 +268,7 @@ export class CreateNewTerminalAction extends Action {
268268
// Don't create the instance if the workspace picker was canceled
269269
return null;
270270
}
271-
return this.terminalService.createInstance({ cwd: workspace.uri.fsPath }, true);
271+
return this.terminalService.createTerminal({ cwd: workspace.uri.fsPath }, true);
272272
});
273273
}
274274

@@ -295,7 +295,7 @@ export class CreateNewInActiveWorkspaceTerminalAction extends Action {
295295
}
296296

297297
public run(event?: any): TPromise<any> {
298-
const instance = this.terminalService.createInstance(undefined, true);
298+
const instance = this.terminalService.createTerminal(undefined, true);
299299
if (!instance) {
300300
return TPromise.as(void 0);
301301
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ export class TerminalPanel extends Panel {
111111
return;
112112
}
113113

114-
const instance = this._terminalService.createInstance();
114+
const instance = this._terminalService.createTerminal();
115115
if (instance) {
116116
this._updateFont();
117117
this._updateTheme();

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

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import * as nls from 'vs/nls';
77
import * as pfs from 'vs/base/node/pfs';
88
import * as platform from 'vs/base/common/platform';
9-
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
9+
import { IContextKeyService, IContextKey } from 'vs/platform/contextkey/common/contextkey';
1010
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
1111
import { ILifecycleService } from 'vs/platform/lifecycle/common/lifecycle';
1212
import { IPanelService } from 'vs/workbench/services/panel/common/panelService';
@@ -26,6 +26,7 @@ import { IDialogService } from 'vs/platform/dialogs/common/dialogs';
2626
import { INotificationService } from 'vs/platform/notification/common/notification';
2727
import { ipcRenderer as ipc } from 'electron';
2828
import { IOpenFileRequest } from 'vs/platform/windows/common/windows';
29+
import { TerminalInstance } from 'vs/workbench/parts/terminal/electron-browser/terminalInstance';
2930

3031
export class TerminalService extends AbstractTerminalService implements ITerminalService {
3132
private _configHelper: TerminalConfigHelper;
@@ -67,7 +68,7 @@ export class TerminalService extends AbstractTerminalService implements ITermina
6768
});
6869
}
6970

70-
public createInstance(shell: IShellLaunchConfig = {}, wasNewTerminalAction?: boolean): ITerminalInstance {
71+
public createTerminal(shell: IShellLaunchConfig = {}, wasNewTerminalAction?: boolean): ITerminalInstance {
7172
const terminalTab = this._instantiationService.createInstance(TerminalTab,
7273
this._terminalFocusContextKey,
7374
this._configHelper,
@@ -88,6 +89,10 @@ export class TerminalService extends AbstractTerminalService implements ITermina
8889
return instance;
8990
}
9091

92+
public createInstance(terminalFocusContextKey: IContextKey<boolean>, configHelper: ITerminalConfigHelper, container: HTMLElement, shellLaunchConfig: IShellLaunchConfig, doCreateProcess: boolean): ITerminalInstance {
93+
return this._instantiationService.createInstance(TerminalInstance, terminalFocusContextKey, configHelper, undefined, shellLaunchConfig, true);
94+
}
95+
9196
public focusFindWidget(): TPromise<void> {
9297
return this.showPanel(false).then(() => {
9398
let panel = this._panelService.getActivePanel() as TerminalPanel;
@@ -154,7 +159,7 @@ export class TerminalService extends AbstractTerminalService implements ITermina
154159
return TPromise.as(null);
155160
}
156161
// Launch a new instance with the newly selected shell
157-
const instance = this.createInstance({
162+
const instance = this.createTerminal({
158163
executable: shell,
159164
args: this._configHelper.config.shellArgs.windows
160165
});
@@ -234,7 +239,7 @@ export class TerminalService extends AbstractTerminalService implements ITermina
234239

235240
public getActiveOrCreateInstance(wasNewTerminalAction?: boolean): ITerminalInstance {
236241
const activeInstance = this.getActiveInstance();
237-
return activeInstance ? activeInstance : this.createInstance(undefined, wasNewTerminalAction);
242+
return activeInstance ? activeInstance : this.createTerminal(undefined, wasNewTerminalAction);
238243
}
239244

240245
protected _showTerminalCloseConfirmation(): TPromise<boolean> {

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

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,7 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import { ITerminalInstance, IShellLaunchConfig, ITerminalTab, Direction, ITerminalService, ITerminalConfigHelper } from 'vs/workbench/parts/terminal/common/terminal';
7-
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
87
import { IContextKey } from 'vs/platform/contextkey/common/contextkey';
9-
// TODO: Let service create instance, and move to browser layer
10-
import { TerminalInstance } from 'vs/workbench/parts/terminal/electron-browser/terminalInstance';
118
import { Event, Emitter, anyEvent } from 'vs/base/common/event';
129
import { IDisposable, Disposable } from 'vs/base/common/lifecycle';
1310
import { SplitView, Orientation, IView } from 'vs/base/browser/ui/splitview/splitview';
@@ -258,15 +255,14 @@ export class TerminalTab extends Disposable implements ITerminalTab {
258255
configHelper: ITerminalConfigHelper,
259256
private _container: HTMLElement,
260257
shellLaunchConfig: IShellLaunchConfig,
261-
@IInstantiationService private readonly _instantiationService: IInstantiationService,
262258
@ITerminalService private readonly _terminalService: ITerminalService,
263259
@IPartService private readonly _partService: IPartService
264260
) {
265261
super();
266262
this._onDisposed = new Emitter<ITerminalTab>();
267263
this._onInstancesChanged = new Emitter<void>();
268264

269-
const instance = this._instantiationService.createInstance(TerminalInstance,
265+
const instance = this._terminalService.createInstance(
270266
terminalFocusContextKey,
271267
configHelper,
272268
undefined,
@@ -396,7 +392,7 @@ export class TerminalTab extends Disposable implements ITerminalTab {
396392
configHelper: ITerminalConfigHelper,
397393
shellLaunchConfig: IShellLaunchConfig
398394
): ITerminalInstance {
399-
const instance = this._instantiationService.createInstance(TerminalInstance,
395+
const instance = this._terminalService.createInstance(
400396
terminalFocusContextKey,
401397
configHelper,
402398
undefined,

0 commit comments

Comments
 (0)