Skip to content

Commit 128635b

Browse files
authored
Merge pull request microsoft#259656 from microsoft/tyriar/259602
Build out terminal editor menu contributions, ensure new terminal windows are unlocked
2 parents 214eb8e + 1796164 commit 128635b

File tree

3 files changed

+95
-20
lines changed

3 files changed

+95
-20
lines changed

src/vs/workbench/contrib/terminal/browser/terminalActions.ts

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ import { getColorClass, getIconId, getUriClasses } from './terminalIcon.js';
6262
import { killTerminalIcon, newTerminalIcon } from './terminalIcons.js';
6363
import { ITerminalQuickPickItem } from './terminalProfileQuickpick.js';
6464
import { TerminalTabList } from './terminalTabsList.js';
65+
import { ResourceContextKey } from '../../../common/contextkeys.js';
66+
import { timeout } from '../../../../base/common/async.js';
6567

6668
export const switchTerminalActionViewItemSeparator = '\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500';
6769
export const switchTerminalShowTabsTitle = localize('showTerminalTabs', "Show Tabs");
@@ -328,7 +330,9 @@ export function registerTerminalActions() {
328330
// called when a terminal is the active editor
329331
const editorGroupsService = accessor.get(IEditorGroupsService);
330332
const instance = await c.service.createTerminal({
331-
location: { viewColumn: editorGroupToColumn(editorGroupsService, editorGroupsService.activeGroup) }
333+
location: {
334+
viewColumn: editorGroupToColumn(editorGroupsService, editorGroupsService.activeGroup),
335+
}
332336
});
333337
await instance.focusWhenReady();
334338
}
@@ -362,6 +366,12 @@ export function registerTerminalActions() {
362366
},
363367
});
364368
await instance.focusWhenReady();
369+
// HACK: Since it's a new window it should be unlocked, despite the configuration, this
370+
// is using a timeout as it's auto locked after several events firing in code internal
371+
// to the editor.
372+
await timeout(100);
373+
const g = c.editorService.getInputFromResource(instance.resource).group;
374+
g?.lock(false);
365375
}
366376
});
367377

@@ -877,7 +887,14 @@ export function registerTerminalActions() {
877887
order: 4,
878888
when: ContextKeyExpr.equals('view', TERMINAL_VIEW_ID),
879889
isHiddenByDefault: true
880-
}
890+
},
891+
...[MenuId.EditorTitle, MenuId.CompactWindowEditorTitle].map(id => ({
892+
id,
893+
group: '1_shellIntegration',
894+
order: 4,
895+
when: ResourceContextKey.Scheme.isEqualTo(Schemas.vscodeTerminal),
896+
isHiddenByDefault: true
897+
})),
881898
],
882899
run: (activeInstance) => activeInstance.xterm?.markTracker.scrollToPreviousMark(undefined, undefined, activeInstance.capabilities.has(TerminalCapability.CommandDetection))
883900
});
@@ -899,7 +916,14 @@ export function registerTerminalActions() {
899916
order: 5,
900917
when: ContextKeyExpr.equals('view', TERMINAL_VIEW_ID),
901918
isHiddenByDefault: true
902-
}
919+
},
920+
...[MenuId.EditorTitle, MenuId.CompactWindowEditorTitle].map(id => ({
921+
id,
922+
group: '1_shellIntegration',
923+
order: 5,
924+
when: ResourceContextKey.Scheme.isEqualTo(Schemas.vscodeTerminal),
925+
isHiddenByDefault: true
926+
})),
903927
],
904928
run: (activeInstance) => {
905929
activeInstance.xterm?.markTracker.scrollToNextMark();

src/vs/workbench/contrib/terminal/browser/terminalMenus.ts

Lines changed: 50 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -696,21 +696,56 @@ export function setupTerminalMenus(): void {
696696
group: '2_files'
697697
});
698698

699-
MenuRegistry.appendMenuItem(MenuId.EditorTitle, {
700-
command: {
701-
id: TerminalCommandId.CreateTerminalEditorSameGroup,
702-
title: terminalStrings.new,
703-
icon: Codicon.plus
704-
},
705-
alt: {
706-
id: TerminalCommandId.Split,
707-
title: terminalStrings.split.value,
708-
icon: Codicon.splitHorizontal
709-
},
710-
group: 'navigation',
711-
order: 0,
712-
when: ResourceContextKey.Scheme.isEqualTo(Schemas.vscodeTerminal)
713-
});
699+
for (const menuId of [MenuId.EditorTitle, MenuId.CompactWindowEditorTitle]) {
700+
MenuRegistry.appendMenuItem(menuId, {
701+
command: {
702+
id: TerminalCommandId.CreateTerminalEditorSameGroup,
703+
title: terminalStrings.new,
704+
icon: Codicon.plus
705+
},
706+
alt: {
707+
id: TerminalCommandId.Split,
708+
title: terminalStrings.split.value,
709+
icon: Codicon.splitHorizontal
710+
},
711+
group: 'navigation',
712+
order: 0,
713+
when: ResourceContextKey.Scheme.isEqualTo(Schemas.vscodeTerminal)
714+
});
715+
MenuRegistry.appendMenuItem(menuId, {
716+
command: {
717+
id: TerminalCommandId.Clear,
718+
title: localize('workbench.action.terminal.clearLong', "Clear Terminal"),
719+
icon: Codicon.clearAll
720+
},
721+
group: 'navigation',
722+
order: 6,
723+
when: ResourceContextKey.Scheme.isEqualTo(Schemas.vscodeTerminal),
724+
isHiddenByDefault: true
725+
});
726+
MenuRegistry.appendMenuItem(menuId, {
727+
command: {
728+
id: TerminalCommandId.RunActiveFile,
729+
title: localize('workbench.action.terminal.runActiveFile', "Run Active File"),
730+
icon: Codicon.run
731+
},
732+
group: 'navigation',
733+
order: 7,
734+
when: ResourceContextKey.Scheme.isEqualTo(Schemas.vscodeTerminal),
735+
isHiddenByDefault: true
736+
});
737+
MenuRegistry.appendMenuItem(menuId, {
738+
command: {
739+
id: TerminalCommandId.RunSelectedText,
740+
title: localize('workbench.action.terminal.runSelectedText', "Run Selected Text"),
741+
icon: Codicon.selection
742+
},
743+
group: 'navigation',
744+
order: 8,
745+
when: ResourceContextKey.Scheme.isEqualTo(Schemas.vscodeTerminal),
746+
isHiddenByDefault: true
747+
});
748+
}
714749
}
715750

716751
export function getTerminalActionBarArgs(location: ITerminalLocationOptions, profiles: ITerminalProfile[], defaultProfileName: string, contributedProfiles: readonly IExtensionTerminalProfile[], terminalService: ITerminalService, dropdownMenu: IMenu, disposableStore: DisposableStore): {

src/vs/workbench/contrib/terminalContrib/history/browser/terminal.history.contribution.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import { KeyCode, KeyMod } from '../../../../../base/common/keyCodes.js';
77
import { Disposable, DisposableStore } from '../../../../../base/common/lifecycle.js';
8+
import { Schemas } from '../../../../../base/common/network.js';
89
import { localize2 } from '../../../../../nls.js';
910
import { AccessibleViewProviderId } from '../../../../../platform/accessibility/browser/accessibleView.js';
1011
import { CONTEXT_ACCESSIBILITY_MODE_ENABLED } from '../../../../../platform/accessibility/common/accessibility.js';
@@ -14,6 +15,7 @@ import { IInstantiationService } from '../../../../../platform/instantiation/com
1415
import { KeybindingWeight } from '../../../../../platform/keybinding/common/keybindingsRegistry.js';
1516
import { TerminalCapability } from '../../../../../platform/terminal/common/capabilities/capabilities.js';
1617
import { TerminalLocation } from '../../../../../platform/terminal/common/terminal.js';
18+
import { ResourceContextKey } from '../../../../common/contextkeys.js';
1719
import { accessibleViewCurrentProviderId, accessibleViewIsShown } from '../../../accessibility/browser/accessibilityConfiguration.js';
1820
import type { ITerminalContribution, ITerminalInstance } from '../../../terminal/browser/terminal.js';
1921
import { registerActiveInstanceAction, registerTerminalAction } from '../../../terminal/browser/terminalActions.js';
@@ -124,7 +126,14 @@ registerActiveInstanceAction({
124126
order: 0,
125127
when: ContextKeyExpr.equals('view', TERMINAL_VIEW_ID),
126128
isHiddenByDefault: true
127-
}
129+
},
130+
...[MenuId.EditorTitle, MenuId.CompactWindowEditorTitle].map(id => ({
131+
id,
132+
group: '1_shellIntegration',
133+
order: 0,
134+
when: ResourceContextKey.Scheme.isEqualTo(Schemas.vscodeTerminal),
135+
isHiddenByDefault: true
136+
})),
128137
],
129138
run: async (activeInstance, c) => {
130139
const history = TerminalHistoryContribution.get(activeInstance);
@@ -164,7 +173,14 @@ registerTerminalAction({
164173
order: 1,
165174
when: ContextKeyExpr.equals('view', TERMINAL_VIEW_ID),
166175
isHiddenByDefault: true
167-
}
176+
},
177+
...[MenuId.EditorTitle, MenuId.CompactWindowEditorTitle].map(id => ({
178+
id,
179+
group: '1_shellIntegration',
180+
order: 1,
181+
when: ResourceContextKey.Scheme.isEqualTo(Schemas.vscodeTerminal),
182+
isHiddenByDefault: true
183+
})),
168184
],
169185
run: async (c, accessor) => {
170186
let activeInstance = c.service.activeInstance;

0 commit comments

Comments
 (0)