From f8d555167efe3d9e571652a480fc3ec2458778fa Mon Sep 17 00:00:00 2001 From: kieferrm Date: Wed, 5 Dec 2018 14:48:18 -0800 Subject: [PATCH 1/2] allow terminal.cwd to be a URI --- src/vs/vscode.d.ts | 4 ++-- src/vs/workbench/api/node/extHost.protocol.ts | 4 ++-- .../workbench/api/node/extHostTerminalService.ts | 2 +- src/vs/workbench/parts/terminal/common/terminal.ts | 2 +- .../electron-browser/terminalProcessManager.ts | 14 ++++++++++++-- .../parts/terminal/node/terminalEnvironment.ts | 2 +- 6 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/vs/vscode.d.ts b/src/vs/vscode.d.ts index 8dad94f8356ee..f40674c954477 100644 --- a/src/vs/vscode.d.ts +++ b/src/vs/vscode.d.ts @@ -6835,9 +6835,9 @@ declare module 'vscode' { shellArgs?: string[]; /** - * A path for the current working directory to be used for the terminal. + * A path or Uri for the current working directory to be used for the terminal. */ - cwd?: string; + cwd?: string | Uri; /** * Object with environment variables that will be added to the VS Code process. diff --git a/src/vs/workbench/api/node/extHost.protocol.ts b/src/vs/workbench/api/node/extHost.protocol.ts index f1f5a4156ab63..1bb4234a48162 100644 --- a/src/vs/workbench/api/node/extHost.protocol.ts +++ b/src/vs/workbench/api/node/extHost.protocol.ts @@ -344,7 +344,7 @@ export interface MainThreadProgressShape extends IDisposable { } export interface MainThreadTerminalServiceShape extends IDisposable { - $createTerminal(name?: string, shellPath?: string, shellArgs?: string[], cwd?: string, env?: { [key: string]: string }, waitOnExit?: boolean): Thenable; + $createTerminal(name?: string, shellPath?: string, shellArgs?: string[], cwd?: string | URI, env?: { [key: string]: string }, waitOnExit?: boolean): Thenable; $createTerminalRenderer(name: string): Thenable; $dispose(terminalId: number): void; $hide(terminalId: number): void; @@ -904,7 +904,7 @@ export interface ShellLaunchConfigDto { name?: string; executable?: string; args?: string[] | string; - cwd?: string; + cwd?: string | URI; env?: { [key: string]: string }; } diff --git a/src/vs/workbench/api/node/extHostTerminalService.ts b/src/vs/workbench/api/node/extHostTerminalService.ts index ff374e794f127..5b9c24db227db 100644 --- a/src/vs/workbench/api/node/extHostTerminalService.ts +++ b/src/vs/workbench/api/node/extHostTerminalService.ts @@ -102,7 +102,7 @@ export class ExtHostTerminal extends BaseExtHostTerminal implements vscode.Termi public create( shellPath?: string, shellArgs?: string[], - cwd?: string, + cwd?: string | URI, env?: { [key: string]: string }, waitOnExit?: boolean ): void { diff --git a/src/vs/workbench/parts/terminal/common/terminal.ts b/src/vs/workbench/parts/terminal/common/terminal.ts index c978bb94ab1b0..6bbe98ee9d8a5 100644 --- a/src/vs/workbench/parts/terminal/common/terminal.ts +++ b/src/vs/workbench/parts/terminal/common/terminal.ts @@ -146,7 +146,7 @@ export interface IShellLaunchConfig { * The current working directory of the terminal, this overrides the `terminal.integrated.cwd` * settings key. */ - cwd?: string; + cwd?: string | URI; /** * A custom environment for the terminal, if this is not set the environment will be inherited diff --git a/src/vs/workbench/parts/terminal/electron-browser/terminalProcessManager.ts b/src/vs/workbench/parts/terminal/electron-browser/terminalProcessManager.ts index a71d05f4b832a..bb37414ba8bf0 100644 --- a/src/vs/workbench/parts/terminal/electron-browser/terminalProcessManager.ts +++ b/src/vs/workbench/parts/terminal/electron-browser/terminalProcessManager.ts @@ -18,7 +18,7 @@ import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace import { IConfigurationResolverService } from 'vs/workbench/services/configurationResolver/common/configurationResolver'; import { IWindowService } from 'vs/platform/windows/common/windows'; import { Schemas } from 'vs/base/common/network'; -import { REMOTE_HOST_SCHEME } from 'vs/platform/remote/common/remoteHosts'; +import { REMOTE_HOST_SCHEME, getRemoteAuthority } from 'vs/platform/remote/common/remoteHosts'; /** The amount of time to consider terminal errors to be related to the launch */ const LAUNCHING_DURATION = 500; @@ -90,7 +90,17 @@ export class TerminalProcessManager implements ITerminalProcessManager { cols: number, rows: number ): void { - if (this._windowService.getConfiguration().remoteAuthority) { + + let launchRemotely = false; + + if (typeof shellLaunchConfig.cwd === 'object') { + launchRemotely = !!getRemoteAuthority(shellLaunchConfig.cwd); + shellLaunchConfig.cwd = shellLaunchConfig.cwd.path; + } else { + launchRemotely = !!this._windowService.getConfiguration().remoteAuthority; + } + + if (launchRemotely) { const activeWorkspaceRootUri = this._historyService.getLastActiveWorkspaceRoot(REMOTE_HOST_SCHEME); this._process = this._instantiationService.createInstance(TerminalProcessExtHostProxy, this._terminalId, shellLaunchConfig, activeWorkspaceRootUri, cols, rows); } else { diff --git a/src/vs/workbench/parts/terminal/node/terminalEnvironment.ts b/src/vs/workbench/parts/terminal/node/terminalEnvironment.ts index 4b018a661f144..7c85a65524b3a 100644 --- a/src/vs/workbench/parts/terminal/node/terminalEnvironment.ts +++ b/src/vs/workbench/parts/terminal/node/terminalEnvironment.ts @@ -126,7 +126,7 @@ function _getLangEnvVariable(locale?: string) { export function getCwd(shell: IShellLaunchConfig, root: Uri, customCwd: string): string { if (shell.cwd) { - return shell.cwd; + return (typeof shell.cwd === 'object') ? shell.cwd.path : shell.cwd; } let cwd: string | undefined; From 88bb661295c8567503f45acdb04f8b6d2c78b01f Mon Sep 17 00:00:00 2001 From: kieferrm Date: Wed, 5 Dec 2018 15:42:29 -0800 Subject: [PATCH 2/2] fix test failure --- .../parts/terminal/electron-browser/terminalProcessManager.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vs/workbench/parts/terminal/electron-browser/terminalProcessManager.ts b/src/vs/workbench/parts/terminal/electron-browser/terminalProcessManager.ts index bb37414ba8bf0..6d14d3b63bf7f 100644 --- a/src/vs/workbench/parts/terminal/electron-browser/terminalProcessManager.ts +++ b/src/vs/workbench/parts/terminal/electron-browser/terminalProcessManager.ts @@ -93,7 +93,7 @@ export class TerminalProcessManager implements ITerminalProcessManager { let launchRemotely = false; - if (typeof shellLaunchConfig.cwd === 'object') { + if (shellLaunchConfig.cwd && typeof shellLaunchConfig.cwd === 'object') { launchRemotely = !!getRemoteAuthority(shellLaunchConfig.cwd); shellLaunchConfig.cwd = shellLaunchConfig.cwd.path; } else {