From 9be887905d48a0a5fd899f8326a1af2e213b7e01 Mon Sep 17 00:00:00 2001 From: meganrogge Date: Mon, 26 Jul 2021 09:32:19 -0700 Subject: [PATCH] fix #129427 --- src/vs/platform/terminal/common/terminal.ts | 2 +- .../contrib/terminal/browser/terminal.ts | 3 ++- .../contrib/terminal/browser/terminalActions.ts | 15 +++++++++++++-- .../contrib/terminal/browser/terminalService.ts | 11 ++++++++++- 4 files changed, 26 insertions(+), 5 deletions(-) diff --git a/src/vs/platform/terminal/common/terminal.ts b/src/vs/platform/terminal/common/terminal.ts index 3189bb07a49..8af72dba799 100644 --- a/src/vs/platform/terminal/common/terminal.ts +++ b/src/vs/platform/terminal/common/terminal.ts @@ -632,4 +632,4 @@ export interface IExtensionTerminalProfile extends ITerminalProfileContribution } export type ITerminalProfileObject = ITerminalExecutable | ITerminalProfileSource | IExtensionTerminalProfile | null; -export type ITerminalProfileQuickpickObject = ITerminalProfile | IExtensionTerminalProfile; +export type ITerminalProfileType = ITerminalProfile | IExtensionTerminalProfile; diff --git a/src/vs/workbench/contrib/terminal/browser/terminal.ts b/src/vs/workbench/contrib/terminal/browser/terminal.ts index a036bd9625e..c5bd39d993a 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminal.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminal.ts @@ -8,7 +8,7 @@ import { IDisposable } from 'vs/base/common/lifecycle'; import { URI } from 'vs/base/common/uri'; import { FindReplaceState } from 'vs/editor/contrib/find/findState'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IShellLaunchConfig, ITerminalChildProcess, ITerminalDimensions, ITerminalLaunchError, ITerminalProfile, ITerminalTabLayoutInfoById, TerminalIcon, TitleEventSource, TerminalShellType, ICreateContributedTerminalProfileOptions, ICreateTerminalOptions, TerminalLocation, IExtensionTerminalProfile } from 'vs/platform/terminal/common/terminal'; +import { IShellLaunchConfig, ITerminalChildProcess, ITerminalDimensions, ITerminalLaunchError, ITerminalProfile, ITerminalTabLayoutInfoById, TerminalIcon, TitleEventSource, TerminalShellType, ICreateContributedTerminalProfileOptions, ICreateTerminalOptions, TerminalLocation, IExtensionTerminalProfile, ITerminalProfileType } from 'vs/platform/terminal/common/terminal'; import { ICommandTracker, INavigationMode, IOffProcessTerminalService, IRemoteTerminalAttachTarget, IStartExtensionTerminalRequest, ITerminalConfigHelper, ITerminalProcessExtHostProxy } from 'vs/workbench/contrib/terminal/common/terminal'; import type { Terminal as XTermTerminal } from 'xterm'; import type { SearchAddon as XTermSearchAddon } from 'xterm-addon-search'; @@ -108,6 +108,7 @@ export interface ITerminalService extends ITerminalInstanceHost { isProcessSupportRegistered: boolean; readonly connectionState: TerminalConnectionState; readonly availableProfiles: ITerminalProfile[]; + readonly allProfiles: ITerminalProfileType[] | undefined; readonly profilesReady: Promise; initializeTerminals(): Promise; diff --git a/src/vs/workbench/contrib/terminal/browser/terminalActions.ts b/src/vs/workbench/contrib/terminal/browser/terminalActions.ts index 37e6cdd4a8a..51e34b08da4 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalActions.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalActions.ts @@ -165,8 +165,19 @@ export function registerTerminalActions() { let event: MouseEvent | PointerEvent | KeyboardEvent | undefined; let options: ICreateTerminalOptions | undefined; - if (typeof eventOrOptionsOrProfile === 'object' && eventOrOptionsOrProfile && 'profileName' in eventOrOptionsOrProfile) { - const config = terminalService.availableProfiles.find(profile => profile.profileName === eventOrOptionsOrProfile.profileName); + if (typeof eventOrOptionsOrProfile === 'object' && eventOrOptionsOrProfile && ('profileName' in eventOrOptionsOrProfile || 'title' in eventOrOptionsOrProfile)) { + const config = terminalService.allProfiles?.find(profile => { + if (profile) { + if ('title' in profile) { + return profile.title === eventOrOptionsOrProfile.profileName; + } else if ('profileName' in profile) { + return profile.profileName === eventOrOptionsOrProfile.profileName; + } else { + return false; + } + } + return false; + }); if (!config) { throw new Error(`Could not find terminal profile "${eventOrOptionsOrProfile.profileName}"`); } diff --git a/src/vs/workbench/contrib/terminal/browser/terminalService.ts b/src/vs/workbench/contrib/terminal/browser/terminalService.ts index 064a0fd990e..cd10e570fc9 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalService.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalService.ts @@ -23,7 +23,7 @@ import { ILabelService } from 'vs/platform/label/common/label'; import { INotificationService } from 'vs/platform/notification/common/notification'; import { IKeyMods, IPickOptions, IQuickInputButton, IQuickInputService, IQuickPickItem, IQuickPickSeparator } from 'vs/platform/quickinput/common/quickInput'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; -import { ICreateContributedTerminalProfileOptions, ICreateTerminalOptions, IExtensionTerminalProfile, IShellLaunchConfig, ITerminalLaunchError, ITerminalProfile, ITerminalProfileObject, ITerminalsLayoutInfo, ITerminalsLayoutInfoById, TerminalLocation, TerminalSettingId, TerminalSettingPrefix } from 'vs/platform/terminal/common/terminal'; +import { ICreateContributedTerminalProfileOptions, ICreateTerminalOptions, IExtensionTerminalProfile, IShellLaunchConfig, ITerminalLaunchError, ITerminalProfile, ITerminalProfileObject, ITerminalProfileType, ITerminalsLayoutInfo, ITerminalsLayoutInfoById, TerminalLocation, TerminalSettingId, TerminalSettingPrefix } from 'vs/platform/terminal/common/terminal'; import { registerTerminalDefaultProfileConfiguration } from 'vs/platform/terminal/common/terminalPlatformConfiguration'; import { iconForeground } from 'vs/platform/theme/common/colorRegistry'; import { IconDefinition } from 'vs/platform/theme/common/iconRegistry'; @@ -80,6 +80,15 @@ export class TerminalService implements ITerminalService { this._refreshAvailableProfiles(); return this._availableProfiles || []; } + get allProfiles(): ITerminalProfileType[] | undefined { + if (this._availableProfiles) { + const profiles: ITerminalProfileType[] = []; + profiles.concat(this._availableProfiles); + profiles.concat(this._terminalContributionService.terminalProfiles); + return profiles; + } + return undefined; + } get configHelper(): ITerminalConfigHelper { return this._configHelper; } get instances(): ITerminalInstance[] { return this._terminalGroupService.instances.concat(this._terminalEditorService.instances); -- GitLab