diff --git a/src/vs/workbench/contrib/terminal/browser/terminalActions.ts b/src/vs/workbench/contrib/terminal/browser/terminalActions.ts index 53ca5cc50c7..8c3944f90b9 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalActions.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalActions.ts @@ -15,10 +15,10 @@ import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService import { EndOfLinePreference } from 'vs/editor/common/model'; import { localize } from 'vs/nls'; import { CONTEXT_ACCESSIBILITY_MODE_ENABLED } from 'vs/platform/accessibility/common/accessibility'; -import { Action2, ICommandActionTitle, ILocalizedString, MenuId, registerAction2 } from 'vs/platform/actions/common/actions'; +import { Action2, ICommandActionTitle, ILocalizedString, registerAction2 } from 'vs/platform/actions/common/actions'; import { ICommandService } from 'vs/platform/commands/common/commands'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; -import { ContextKeyAndExpr, ContextKeyEqualsExpr, ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; +import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; import { ILabelService } from 'vs/platform/label/common/label'; @@ -32,7 +32,7 @@ import { PICK_WORKSPACE_FOLDER_COMMAND_ID } from 'vs/workbench/browser/actions/w import { FindInFilesCommand, IFindInFilesArgs } from 'vs/workbench/contrib/search/browser/searchActions'; import { Direction, IRemoteTerminalService, ITerminalInstance, ITerminalInstanceService, ITerminalService } from 'vs/workbench/contrib/terminal/browser/terminal'; import { TerminalQuickAccessProvider } from 'vs/workbench/contrib/terminal/browser/terminalQuickAccess'; -import { IRemoteTerminalAttachTarget, ITerminalConfigHelper, KEYBINDING_CONTEXT_TERMINAL_A11Y_TREE_FOCUS, KEYBINDING_CONTEXT_TERMINAL_ALT_BUFFER_ACTIVE, KEYBINDING_CONTEXT_TERMINAL_FIND_FOCUSED, KEYBINDING_CONTEXT_TERMINAL_FIND_NOT_VISIBLE, KEYBINDING_CONTEXT_TERMINAL_FIND_VISIBLE, KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_IS_OPEN, KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED, KEYBINDING_CONTEXT_TERMINAL_TABS_FOCUS, KEYBINDING_CONTEXT_TERMINAL_TABS_SINGULAR_SELECTION, KEYBINDING_CONTEXT_TERMINAL_TEXT_SELECTED, TERMINAL_ACTION_CATEGORY, TerminalCommandId, TERMINAL_VIEW_ID } from 'vs/workbench/contrib/terminal/common/terminal'; +import { IRemoteTerminalAttachTarget, ITerminalConfigHelper, KEYBINDING_CONTEXT_TERMINAL_A11Y_TREE_FOCUS, KEYBINDING_CONTEXT_TERMINAL_ALT_BUFFER_ACTIVE, KEYBINDING_CONTEXT_TERMINAL_FIND_FOCUSED, KEYBINDING_CONTEXT_TERMINAL_FIND_NOT_VISIBLE, KEYBINDING_CONTEXT_TERMINAL_FIND_VISIBLE, KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_IS_OPEN, KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED, KEYBINDING_CONTEXT_TERMINAL_TABS_FOCUS, KEYBINDING_CONTEXT_TERMINAL_TABS_SINGULAR_SELECTION, KEYBINDING_CONTEXT_TERMINAL_TEXT_SELECTED, TERMINAL_ACTION_CATEGORY, TerminalCommandId } from 'vs/workbench/contrib/terminal/common/terminal'; import { ITerminalContributionService } from 'vs/workbench/contrib/terminal/common/terminalExtensionPoints'; import { terminalStrings } from 'vs/workbench/contrib/terminal/common/terminalStrings'; import { IConfigurationResolverService } from 'vs/workbench/services/configurationResolver/common/configurationResolver'; @@ -343,38 +343,10 @@ export function registerTerminalActions() { constructor() { super({ id: TerminalCommandId.Focus, - title: { value: localize('workbench.action.terminal.focus', "Focus Terminal"), original: 'Focus Terminal' }, + title: terminalStrings.focus, f1: true, category, - precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED, - // This command is used to show instead of tabs when there is only a single terminal - menu: { - id: MenuId.ViewTitle, - group: 'navigation', - order: 0, - when: ContextKeyAndExpr.create([ - ContextKeyEqualsExpr.create('view', TERMINAL_VIEW_ID), - ContextKeyExpr.has(`config.${TerminalSettingId.TabsEnabled}`), - ContextKeyExpr.or( - ContextKeyExpr.and( - ContextKeyExpr.equals(`config.${TerminalSettingId.TabsShowActiveTerminal}`, 'singleTerminal'), - ContextKeyExpr.equals('terminalCount', 1) - ), - ContextKeyExpr.and( - ContextKeyExpr.equals(`config.${TerminalSettingId.TabsShowActiveTerminal}`, 'singleTerminalOrNarrow'), - ContextKeyExpr.or( - ContextKeyExpr.equals('terminalCount', 1), - ContextKeyExpr.has('isTerminalTabsNarrow') - ) - ), - ContextKeyExpr.and( - ContextKeyExpr.equals(`config.${TerminalSettingId.TabsShowActiveTerminal}`, 'singleGroup'), - ContextKeyExpr.equals('terminalGroupCount', 1) - ), - ContextKeyExpr.equals(`config.${TerminalSettingId.TabsShowActiveTerminal}`, 'always') - ) - ]), - } + precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED }); } async run(accessor: ServicesAccessor) { @@ -1362,15 +1334,6 @@ export function registerTerminalActions() { type: 'object' } }] - }, - menu: { - id: MenuId.ViewTitle, - group: 'navigation', - order: 2, - when: ContextKeyAndExpr.create([ - ContextKeyEqualsExpr.create('view', TERMINAL_VIEW_ID), - ContextKeyExpr.not(`config.${TerminalSettingId.TabsEnabled}`) - ]) } }); } @@ -1579,16 +1542,7 @@ export function registerTerminalActions() { f1: true, category, precondition: ContextKeyExpr.or(KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED, KEYBINDING_CONTEXT_TERMINAL_IS_OPEN), - icon: Codicon.trash, - menu: { - id: MenuId.ViewTitle, - group: 'navigation', - order: 3, - when: ContextKeyAndExpr.create([ - ContextKeyEqualsExpr.create('view', TERMINAL_VIEW_ID), - ContextKeyExpr.not(`config.${TerminalSettingId.TabsEnabled}`) - ]) - } + icon: Codicon.trash }); } async run(accessor: ServicesAccessor) { @@ -1683,15 +1637,7 @@ export function registerTerminalActions() { title: TerminalCommandId.CreateWithProfileButton, f1: false, category, - precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED, - menu: [{ - id: MenuId.ViewTitle, - group: 'navigation', - order: 0, - when: ContextKeyAndExpr.create([ - ContextKeyEqualsExpr.create('view', TERMINAL_VIEW_ID) - ]), - }] + precondition: KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED }); } async run(accessor: ServicesAccessor) { diff --git a/src/vs/workbench/contrib/terminal/browser/terminalMenus.ts b/src/vs/workbench/contrib/terminal/browser/terminalMenus.ts index 069593910e7..659322dfb40 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalMenus.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalMenus.ts @@ -3,6 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +import { Codicon } from 'vs/base/common/codicons'; import { localize } from 'vs/nls'; import { MenuRegistry, MenuId } from 'vs/platform/actions/common/actions'; import { ContextKeyAndExpr, ContextKeyEqualsExpr, ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; @@ -240,6 +241,86 @@ export function setupTerminalMenus(): void { ContextKeyExpr.not(`config.${TerminalSettingId.TabsEnabled}`) ]), } + }, + { + // This is used to show instead of tabs when there is only a single terminal + id: MenuId.ViewTitle, + item: { + command: { + id: TerminalCommandId.Focus, + title: terminalStrings.focus + }, + group: 'navigation', + order: 0, + when: ContextKeyAndExpr.create([ + ContextKeyEqualsExpr.create('view', TERMINAL_VIEW_ID), + ContextKeyExpr.has(`config.${TerminalSettingId.TabsEnabled}`), + ContextKeyExpr.or( + ContextKeyExpr.and( + ContextKeyExpr.equals(`config.${TerminalSettingId.TabsShowActiveTerminal}`, 'singleTerminal'), + ContextKeyExpr.equals('terminalCount', 1) + ), + ContextKeyExpr.and( + ContextKeyExpr.equals(`config.${TerminalSettingId.TabsShowActiveTerminal}`, 'singleTerminalOrNarrow'), + ContextKeyExpr.or( + ContextKeyExpr.equals('terminalCount', 1), + ContextKeyExpr.has('isTerminalTabsNarrow') + ) + ), + ContextKeyExpr.and( + ContextKeyExpr.equals(`config.${TerminalSettingId.TabsShowActiveTerminal}`, 'singleGroup'), + ContextKeyExpr.equals('terminalGroupCount', 1) + ), + ContextKeyExpr.equals(`config.${TerminalSettingId.TabsShowActiveTerminal}`, 'always') + ) + ]), + } + }, + { + id: MenuId.ViewTitle, + item: { + command: { + id: TerminalCommandId.Split, + title: terminalStrings.split, + icon: Codicon.splitHorizontal + }, + group: 'navigation', + order: 2, + when: ContextKeyAndExpr.create([ + ContextKeyEqualsExpr.create('view', TERMINAL_VIEW_ID), + ContextKeyExpr.not(`config.${TerminalSettingId.TabsEnabled}`) + ]) + } + }, + { + id: MenuId.ViewTitle, + item: { + command: { + id: TerminalCommandId.Kill, + title: terminalStrings.kill, + icon: Codicon.trash + }, + group: 'navigation', + order: 3, + when: ContextKeyAndExpr.create([ + ContextKeyEqualsExpr.create('view', TERMINAL_VIEW_ID), + ContextKeyExpr.not(`config.${TerminalSettingId.TabsEnabled}`) + ]) + } + }, + { + id: MenuId.ViewTitle, + item: { + command: { + id: TerminalCommandId.CreateWithProfileButton, + title: TerminalCommandId.CreateWithProfileButton + }, + group: 'navigation', + order: 0, + when: ContextKeyAndExpr.create([ + ContextKeyEqualsExpr.create('view', TERMINAL_VIEW_ID) + ]) + } } ] ); diff --git a/src/vs/workbench/contrib/terminal/common/terminalStrings.ts b/src/vs/workbench/contrib/terminal/common/terminalStrings.ts index fff953de11b..854fb806931 100644 --- a/src/vs/workbench/contrib/terminal/common/terminalStrings.ts +++ b/src/vs/workbench/contrib/terminal/common/terminalStrings.ts @@ -17,6 +17,10 @@ export function formatMessageForTerminal(message: string, excludeLeadingNewLine: * An object holding strings shared by multiple parts of the terminal */ export const terminalStrings = { + focus: { + value: localize('workbench.action.terminal.focus', "Focus Terminal"), + original: 'Focus Terminal' + }, kill: { value: localize('killTerminal', "Kill Terminal"), original: 'Kill Terminal',