Skip to content

Commit b3ec21e

Browse files
authored
Merge pull request microsoft#250799 from Sublimeful/main
Implements Terminal: Run Recent Command when there are no terminals
2 parents a5af033 + cba1b1a commit b3ec21e

File tree

1 file changed

+18
-3
lines changed

1 file changed

+18
-3
lines changed

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

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import { KeyCode, KeyMod } from '../../../../../base/common/keyCodes.js';
7-
import { Disposable } from '../../../../../base/common/lifecycle.js';
7+
import { Disposable, DisposableStore } from '../../../../../base/common/lifecycle.js';
88
import { localize2 } from '../../../../../nls.js';
99
import { AccessibleViewProviderId } from '../../../../../platform/accessibility/browser/accessibleView.js';
1010
import { CONTEXT_ACCESSIBILITY_MODE_ENABLED } from '../../../../../platform/accessibility/common/accessibility.js';
@@ -129,7 +129,7 @@ registerActiveInstanceAction({
129129
}
130130
});
131131

132-
registerActiveInstanceAction({
132+
registerTerminalAction({
133133
id: TerminalHistoryCommandId.RunRecentCommand,
134134
title: localize2('workbench.action.terminal.runRecentCommand', 'Run Recent Command...'),
135135
precondition,
@@ -146,7 +146,22 @@ registerActiveInstanceAction({
146146
weight: KeybindingWeight.WorkbenchContrib
147147
}
148148
],
149-
run: async (activeInstance, c) => {
149+
run: async (c, accessor) => {
150+
let activeInstance = c.service.activeInstance;
151+
// If an instanec doesn't exist, create one and wait for shell type to be set
152+
if (!activeInstance) {
153+
const newInstance = activeInstance = await c.service.getActiveOrCreateInstance();
154+
await c.service.revealActiveTerminal();
155+
const store = new DisposableStore();
156+
const wasDisposedPrematurely = await new Promise<boolean>(r => {
157+
store.add(newInstance.onDidChangeShellType(() => r(false)));
158+
store.add(newInstance.onDisposed(() => r(true)));
159+
});
160+
store.dispose();
161+
if (wasDisposedPrematurely) {
162+
return;
163+
}
164+
}
150165
const history = TerminalHistoryContribution.get(activeInstance);
151166
if (!history) {
152167
return;

0 commit comments

Comments
 (0)