diff --git a/src/vs/workbench/contrib/terminal/common/terminal.ts b/src/vs/workbench/contrib/terminal/common/terminal.ts index d36b3cbeae370b536d79ed7aac6f4c91cd49fb42..5673030976d5a525a7c0a128e269a8af2e993dae 100644 --- a/src/vs/workbench/contrib/terminal/common/terminal.ts +++ b/src/vs/workbench/contrib/terminal/common/terminal.ts @@ -251,7 +251,7 @@ export interface ITerminalService { findPrevious(): void; setContainers(panelContainer: HTMLElement, terminalContainer: HTMLElement): void; - selectDefaultWindowsShell(): Promise; + selectDefaultWindowsShell(): Promise; setWorkspaceShellAllowed(isAllowed: boolean): void; requestExtHostProcess(proxy: ITerminalProcessExtHostProxy, shellLaunchConfig: IShellLaunchConfig, activeWorkspaceRootUri: URI, cols: number, rows: number): void; diff --git a/src/vs/workbench/contrib/terminal/common/terminalService.ts b/src/vs/workbench/contrib/terminal/common/terminalService.ts index 2af5a375481e6e77b30346f346cbbd2c8681db04..ab539243fc76759cfa29406b3ad03fbb338ddbf7 100644 --- a/src/vs/workbench/contrib/terminal/common/terminalService.ts +++ b/src/vs/workbench/contrib/terminal/common/terminalService.ts @@ -92,7 +92,7 @@ export abstract class TerminalService implements ITerminalService { public abstract createTerminalRenderer(name: string): ITerminalInstance; public abstract createInstance(terminalFocusContextKey: IContextKey, configHelper: ITerminalConfigHelper, container: HTMLElement, shellLaunchConfig: IShellLaunchConfig, doCreateProcess: boolean): ITerminalInstance; public abstract getActiveOrCreateInstance(wasNewTerminalAction?: boolean): ITerminalInstance; - public abstract selectDefaultWindowsShell(): Promise; + public abstract selectDefaultWindowsShell(): Promise; public abstract setContainers(panelContainer: HTMLElement, terminalContainer: HTMLElement): void; public abstract requestExtHostProcess(proxy: ITerminalProcessExtHostProxy, shellLaunchConfig: IShellLaunchConfig, activeWorkspaceRootUri: URI, cols: number, rows: number): void; diff --git a/src/vs/workbench/contrib/terminal/electron-browser/terminalService.ts b/src/vs/workbench/contrib/terminal/electron-browser/terminalService.ts index fbace8ec6fb829bc3a59b780229cc6716fa9dee9..fcbd99a09b363f57f63c8091bd787f6a68496893 100644 --- a/src/vs/workbench/contrib/terminal/electron-browser/terminalService.ts +++ b/src/vs/workbench/contrib/terminal/electron-browser/terminalService.ts @@ -64,7 +64,10 @@ export class TerminalService extends AbstractTerminalService implements ITermina if (request.termProgram === 'vscode' && request.filesToWait) { pfs.whenDeleted(request.filesToWait.waitMarkerFilePath).then(() => { if (this.terminalInstances.length > 0) { - this.getActiveInstance().focus(); + const terminal = this.getActiveInstance(); + if (terminal) { + terminal.focus(); + } } }); } @@ -215,14 +218,14 @@ export class TerminalService extends AbstractTerminalService implements ITermina ); } - public selectDefaultWindowsShell(): Promise { + public selectDefaultWindowsShell(): Promise { return this._detectWindowsShells().then(shells => { const options: IPickOptions = { placeHolder: nls.localize('terminal.integrated.chooseWindowsShell', "Select your preferred terminal shell, you can change this later in your settings") }; return this._quickInputService.pick(shells, options).then(value => { if (!value) { - return null; + return undefined; } const shell = value.description; return this._configurationService.updateValue('terminal.integrated.shell.windows', shell, ConfigurationTarget.USER).then(() => shell); @@ -270,13 +273,13 @@ export class TerminalService extends AbstractTerminalService implements ITermina }); } - private _validateShellPaths(label: string, potentialPaths: string[]): Promise<[string, string]> { + private _validateShellPaths(label: string, potentialPaths: string[]): Promise<[string, string] | null> { + if (potentialPaths.length === 0) { + return Promise.resolve(null); + } const current = potentialPaths.shift(); - return pfs.fileExists(current).then(exists => { + return pfs.fileExists(current!).then(exists => { if (!exists) { - if (potentialPaths.length === 0) { - return null; - } return this._validateShellPaths(label, potentialPaths); } return [label, current] as [string, string];