diff --git a/src/vs/workbench/api/browser/mainThreadTerminalService.ts b/src/vs/workbench/api/browser/mainThreadTerminalService.ts index 5ba2b3bbb24fa58feeed89f29d0aef403018665f..a388f623d745876af1d2fca903a74fe084a7b070 100644 --- a/src/vs/workbench/api/browser/mainThreadTerminalService.ts +++ b/src/vs/workbench/api/browser/mainThreadTerminalService.ts @@ -5,9 +5,9 @@ import { IDisposable, dispose } from 'vs/base/common/lifecycle'; import { ITerminalService, ITerminalInstance, IShellLaunchConfig, ITerminalProcessExtHostProxy, ITerminalProcessExtHostRequest, ITerminalDimensions, EXT_HOST_CREATION_DELAY, IAvailableShellsRequest, IDefaultShellAndArgsRequest } from 'vs/workbench/contrib/terminal/common/terminal'; -import { ExtHostContext, ExtHostTerminalServiceShape, MainThreadTerminalServiceShape, MainContext, IExtHostContext, ShellLaunchConfigDto } from 'vs/workbench/api/common/extHost.protocol'; +import { ExtHostContext, ExtHostTerminalServiceShape, MainThreadTerminalServiceShape, MainContext, IExtHostContext, ShellLaunchConfigDto, TerminalLaunchConfig } from 'vs/workbench/api/common/extHost.protocol'; import { extHostNamedCustomer } from 'vs/workbench/api/common/extHostCustomers'; -import { UriComponents, URI } from 'vs/base/common/uri'; +import { URI } from 'vs/base/common/uri'; import { StopWatch } from 'vs/base/common/stopwatch'; import { ITerminalInstanceService } from 'vs/workbench/contrib/terminal/browser/terminal'; import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService'; @@ -78,18 +78,18 @@ export class MainThreadTerminalService implements MainThreadTerminalServiceShape // when the extension host process goes down ? } - public $createTerminal(name?: string, shellPath?: string, shellArgs?: string[] | string, cwd?: string | UriComponents, env?: { [key: string]: string }, waitOnExit?: boolean, strictEnv?: boolean, hideFromUser?: boolean, isVirtualProcess?: boolean): Promise<{ id: number, name: string }> { + public $createTerminal(launchConfig: TerminalLaunchConfig): Promise<{ id: number, name: string }> { const shellLaunchConfig: IShellLaunchConfig = { - name, - executable: shellPath, - args: shellArgs, - cwd: typeof cwd === 'string' ? cwd : URI.revive(cwd), - waitOnExit, + name: launchConfig.name, + executable: launchConfig.shellPath, + args: launchConfig.shellArgs, + cwd: typeof launchConfig.cwd === 'string' ? launchConfig.cwd : URI.revive(launchConfig.cwd), + waitOnExit: launchConfig.waitOnExit, ignoreConfigurationCwd: true, - env, - strictEnv, - hideFromUser, - isVirtualProcess + env: launchConfig.env, + strictEnv: launchConfig.strictEnv, + hideFromUser: launchConfig.hideFromUser, + isVirtualProcess: launchConfig.isVirtualProcess }; const terminal = this._terminalService.createTerminal(shellLaunchConfig); this._terminalProcesses[terminal.id] = new Promise(r => this._terminalProcessesReady[terminal.id] = r); diff --git a/src/vs/workbench/api/common/extHost.protocol.ts b/src/vs/workbench/api/common/extHost.protocol.ts index 0733bc2776db3b5c1914d2668026578170c826ae..603fe598cfed308c950f25f5734f9c1d6780c619 100644 --- a/src/vs/workbench/api/common/extHost.protocol.ts +++ b/src/vs/workbench/api/common/extHost.protocol.ts @@ -389,8 +389,20 @@ export interface MainThreadProgressShape extends IDisposable { $progressEnd(handle: number): void; } +export interface TerminalLaunchConfig { + name?: string; + shellPath?: string; + shellArgs?: string[] | string; + cwd?: string | UriComponents; + env?: { [key: string]: string | null }; + waitOnExit?: boolean; + strictEnv?: boolean; + hideFromUser?: boolean; + isVirtualProcess?: boolean; +} + export interface MainThreadTerminalServiceShape extends IDisposable { - $createTerminal(name?: string, shellPath?: string, shellArgs?: string[] | string, cwd?: string | UriComponents, env?: { [key: string]: string | null }, waitOnExit?: boolean, strictEnv?: boolean, hideFromUser?: boolean, isVirtualProcess?: boolean): Promise<{ id: number, name: string }>; + $createTerminal(config: TerminalLaunchConfig): Promise<{ id: number, name: string }>; $createTerminalRenderer(name: string): Promise; $dispose(terminalId: number): void; $hide(terminalId: number): void; diff --git a/src/vs/workbench/api/node/extHostTerminalService.ts b/src/vs/workbench/api/node/extHostTerminalService.ts index cbac2f8f96bb1f16b4ee5711f3d31f3e88484514..9d737f484d04cbdf9095dbb835f43a9c7a2356c7 100644 --- a/src/vs/workbench/api/node/extHostTerminalService.ts +++ b/src/vs/workbench/api/node/extHostTerminalService.ts @@ -119,15 +119,14 @@ export class ExtHostTerminal extends BaseExtHostTerminal implements vscode.Termi strictEnv?: boolean, hideFromUser?: boolean ): void { - this._proxy.$createTerminal(this._name, shellPath, shellArgs, cwd, env, waitOnExit, strictEnv, hideFromUser).then(terminal => { + this._proxy.$createTerminal({ name: this._name, shellPath, shellArgs, cwd, env, waitOnExit, strictEnv, hideFromUser }).then(terminal => { this._name = terminal.name; this._runQueuedRequests(terminal.id); }); } public createVirtualProcess(): Promise { - // TODO: Change $createTerminal to accept an object - return this._proxy.$createTerminal(this._name, undefined, undefined, undefined, undefined, undefined, undefined, undefined, true).then(terminal => { + return this._proxy.$createTerminal({ name: this._name, isVirtualProcess: true }).then(terminal => { this._name = terminal.name; this._runQueuedRequests(terminal.id); });