From 01a874ac982e6ca51e1a6b519cd603826c5822ad Mon Sep 17 00:00:00 2001 From: Megan Rogge Date: Tue, 27 Jul 2021 23:05:59 -0500 Subject: [PATCH] update default profile in dropdown when set to contributed one (#129619) --- .../contrib/terminal/browser/terminal.ts | 2 ++ .../contrib/terminal/browser/terminalEditor.ts | 17 ++++++++++++----- .../contrib/terminal/browser/terminalService.ts | 16 ++++++++++++++-- .../contrib/terminal/browser/terminalView.ts | 17 ++++++++++++----- 4 files changed, 40 insertions(+), 12 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminal.ts b/src/vs/workbench/contrib/terminal/browser/terminal.ts index c5bd39d993a..c150336e18c 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminal.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminal.ts @@ -184,6 +184,8 @@ export interface ITerminalService extends ITerminalInstanceHost { getDefaultInstanceHost(): ITerminalInstanceHost; getInstanceHost(target: TerminalLocation | undefined): ITerminalInstanceHost; getFindHost(instance?: ITerminalInstance): ITerminalFindHost; + + getDefaultProfileName(): string; } /** diff --git a/src/vs/workbench/contrib/terminal/browser/terminalEditor.ts b/src/vs/workbench/contrib/terminal/browser/terminalEditor.ts index 46787f03364..1d4998354cf 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalEditor.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalEditor.ts @@ -219,7 +219,12 @@ export class TerminalEditor extends EditorPane { const dropdownActions: IAction[] = []; const submenuActions: IAction[] = []; - const defaultProfileName = this._terminalProfileResolverService.defaultProfileName; + let defaultProfileName; + try { + defaultProfileName = this._terminalService.getDefaultProfileName(); + } catch (e) { + defaultProfileName = this._terminalProfileResolverService.defaultProfileName; + } for (const p of profiles) { const isDefault = p.profileName === defaultProfileName; const options: IMenuActionOptions = { @@ -239,19 +244,21 @@ export class TerminalEditor extends EditorPane { } for (const contributed of this._terminalContributionService.terminalProfiles) { - dropdownActions.push(new Action(TerminalCommandId.NewWithProfile, contributed.title.replace(/[\n\r\t]/g, ''), undefined, true, () => this._terminalService.createTerminal({ + const isDefault = contributed.title === defaultProfileName; + const title = isDefault ? localize('defaultTerminalProfile', "{0} (Default)", contributed.title.replace(/[\n\r\t]/g, '')) : contributed.title.replace(/[\n\r\t]/g, ''); + dropdownActions.push(new Action(TerminalCommandId.NewWithProfile, title, undefined, true, () => this._terminalService.createTerminal({ config: { extensionIdentifier: contributed.extensionIdentifier, id: contributed.id, - title: contributed.title.replace(/[\n\r\t]/g, '') + title }, target: TerminalLocation.Editor }))); - submenuActions.push(new Action(TerminalCommandId.NewWithProfile, contributed.title.replace(/[\n\r\t]/g, ''), undefined, true, () => this._terminalService.createTerminal({ + submenuActions.push(new Action(TerminalCommandId.NewWithProfile, title, undefined, true, () => this._terminalService.createTerminal({ config: { extensionIdentifier: contributed.extensionIdentifier, id: contributed.id, - title: contributed.title.replace(/[\n\r\t]/g, '') + title }, forceSplit: true, target: TerminalLocation.Editor diff --git a/src/vs/workbench/contrib/terminal/browser/terminalService.ts b/src/vs/workbench/contrib/terminal/browser/terminalService.ts index 14612637fbb..8cc5d47e61e 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalService.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalService.ts @@ -64,8 +64,10 @@ export class TerminalService implements ITerminalService { private _processSupportContextKey: IContextKey; private readonly _localTerminalService?: ILocalTerminalService; private readonly _primaryOffProcessTerminalService?: IOffProcessTerminalService; + private _defaultProfileName?: string; private _profilesReadyBarrier: AutoOpenBarrier; private _availableProfiles: ITerminalProfile[] | undefined; + private _contributedProfiles: IExtensionTerminalProfile[] | undefined; private _configHelper: TerminalConfigHelper; private _remoteTerminalsInitPromise: Promise | undefined; private _localTerminalsInitPromise: Promise | undefined; @@ -485,8 +487,10 @@ export class TerminalService implements ITerminalService { private async _refreshAvailableProfiles(): Promise { const result = await this._detectProfiles(); const profilesChanged = !equals(result, this._availableProfiles); - if (profilesChanged) { + const contributedProfilesChanged = !equals(this._terminalContributionService.terminalProfiles, this._contributedProfiles); + if (profilesChanged || contributedProfilesChanged) { this._availableProfiles = result; + this._contributedProfiles = Array.from(this._terminalContributionService.terminalProfiles); this._onDidChangeAvailableProfiles.fire(this._availableProfiles); this._profilesReadyBarrier.open(); await this._refreshPlatformConfig(result); @@ -504,7 +508,15 @@ export class TerminalService implements ITerminalService { return this._availableProfiles || []; } const platform = await this._getPlatformKey(); - return this._primaryOffProcessTerminalService?.getProfiles(this._configurationService.getValue(`${TerminalSettingPrefix.Profiles}${platform}`), this._configurationService.getValue(`${TerminalSettingPrefix.DefaultProfile}${platform}`), includeDetectedProfiles); + this._defaultProfileName = this._configurationService.getValue(`${TerminalSettingPrefix.DefaultProfile}${platform}`); + return this._primaryOffProcessTerminalService?.getProfiles(this._configurationService.getValue(`${TerminalSettingPrefix.Profiles}${platform}`), this._defaultProfileName, includeDetectedProfiles); + } + + getDefaultProfileName(): string { + if (!this._defaultProfileName) { + throw new Error('no default profile'); + } + return this._defaultProfileName; } private _onBeforeShutdown(reason: ShutdownReason): boolean | Promise { diff --git a/src/vs/workbench/contrib/terminal/browser/terminalView.ts b/src/vs/workbench/contrib/terminal/browser/terminalView.ts index e6dbceafd0e..fdf4da6a77d 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalView.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalView.ts @@ -232,7 +232,12 @@ export class TerminalViewPane extends ViewPane { const dropdownActions: IAction[] = []; const submenuActions: IAction[] = []; - const defaultProfileName = this._terminalProfileResolverService.defaultProfileName; + let defaultProfileName; + try { + defaultProfileName = this._terminalService.getDefaultProfileName(); + } catch (e) { + defaultProfileName = this._terminalProfileResolverService.defaultProfileName; + } for (const p of profiles) { const isDefault = p.profileName === defaultProfileName; const options: IMenuActionOptions = { @@ -252,19 +257,21 @@ export class TerminalViewPane extends ViewPane { } for (const contributed of this._terminalContributionService.terminalProfiles) { - dropdownActions.push(new Action(TerminalCommandId.NewWithProfile, contributed.title.replace(/[\n\r\t]/g, ''), undefined, true, () => this._terminalService.createTerminal({ + const isDefault = contributed.title === defaultProfileName; + const title = isDefault ? nls.localize('defaultTerminalProfile', "{0} (Default)", contributed.title.replace(/[\n\r\t]/g, '')) : contributed.title.replace(/[\n\r\t]/g, ''); + dropdownActions.push(new Action(TerminalCommandId.NewWithProfile, title, undefined, true, () => this._terminalService.createTerminal({ config: { extensionIdentifier: contributed.extensionIdentifier, id: contributed.id, - title: contributed.title.replace(/[\n\r\t]/g, '') + title }, forceSplit: false }))); - submenuActions.push(new Action(TerminalCommandId.NewWithProfile, contributed.title.replace(/[\n\r\t]/g, ''), undefined, true, () => this._terminalService.createTerminal({ + submenuActions.push(new Action(TerminalCommandId.NewWithProfile, title, undefined, true, () => this._terminalService.createTerminal({ config: { extensionIdentifier: contributed.extensionIdentifier, id: contributed.id, - title: contributed.title.replace(/[\n\r\t]/g, '') + title }, forceSplit: true }))); -- GitLab