Skip to content

Commit 1963239

Browse files
authored
Merge pull request microsoft#79863 from jeanp413/terminal-here-command
Add terminal.newHere command
2 parents 7c1728e + b5ec934 commit 1963239

3 files changed

Lines changed: 54 additions & 11 deletions

File tree

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

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import * as panel from 'vs/workbench/browser/panel';
2020
import { getQuickNavigateHandler } from 'vs/workbench/browser/parts/quickopen/quickopen';
2121
import { Extensions as QuickOpenExtensions, IQuickOpenRegistry, QuickOpenHandlerDescriptor } from 'vs/workbench/browser/quickopen';
2222
import { Extensions as ActionExtensions, IWorkbenchActionRegistry } from 'vs/workbench/common/actions';
23-
import { ClearSelectionTerminalAction, ClearTerminalAction, CopyTerminalSelectionAction, CreateNewInActiveWorkspaceTerminalAction, CreateNewTerminalAction, DeleteToLineStartTerminalAction, DeleteWordLeftTerminalAction, DeleteWordRightTerminalAction, FindNext, FindPrevious, FocusActiveTerminalAction, FocusNextPaneTerminalAction, FocusNextTerminalAction, FocusPreviousPaneTerminalAction, FocusPreviousTerminalAction, FocusTerminalFindWidgetAction, HideTerminalFindWidgetAction, KillTerminalAction, MoveToLineEndTerminalAction, MoveToLineStartTerminalAction, QuickOpenActionTermContributor, QuickOpenTermAction, RenameTerminalAction, ResizePaneDownTerminalAction, ResizePaneLeftTerminalAction, ResizePaneRightTerminalAction, ResizePaneUpTerminalAction, RunActiveFileInTerminalAction, RunSelectedTextInTerminalAction, ScrollDownPageTerminalAction, ScrollDownTerminalAction, ScrollToBottomTerminalAction, ScrollToNextCommandAction, ScrollToPreviousCommandAction, ScrollToTopTerminalAction, ScrollUpPageTerminalAction, ScrollUpTerminalAction, SelectAllTerminalAction, SelectDefaultShellWindowsTerminalAction, SelectToNextCommandAction, SelectToNextLineAction, SelectToPreviousCommandAction, SelectToPreviousLineAction, SendSequenceTerminalCommand, SplitInActiveWorkspaceTerminalAction, SplitTerminalAction, TerminalPasteAction, TERMINAL_PICKER_PREFIX, ToggleCaseSensitiveCommand, ToggleEscapeSequenceLoggingAction, ToggleRegexCommand, ToggleTerminalAction, ToggleWholeWordCommand, NavigationModeFocusPreviousTerminalAction, NavigationModeFocusNextTerminalAction, NavigationModeExitTerminalAction, ManageWorkspaceShellPermissionsTerminalCommand } from 'vs/workbench/contrib/terminal/browser/terminalActions';
23+
import { ClearSelectionTerminalAction, ClearTerminalAction, CopyTerminalSelectionAction, CreateNewInActiveWorkspaceTerminalAction, CreateNewTerminalAction, DeleteToLineStartTerminalAction, DeleteWordLeftTerminalAction, DeleteWordRightTerminalAction, FindNext, FindPrevious, FocusActiveTerminalAction, FocusNextPaneTerminalAction, FocusNextTerminalAction, FocusPreviousPaneTerminalAction, FocusPreviousTerminalAction, FocusTerminalFindWidgetAction, HideTerminalFindWidgetAction, KillTerminalAction, MoveToLineEndTerminalAction, MoveToLineStartTerminalAction, QuickOpenActionTermContributor, QuickOpenTermAction, RenameTerminalAction, ResizePaneDownTerminalAction, ResizePaneLeftTerminalAction, ResizePaneRightTerminalAction, ResizePaneUpTerminalAction, RunActiveFileInTerminalAction, RunSelectedTextInTerminalAction, ScrollDownPageTerminalAction, ScrollDownTerminalAction, ScrollToBottomTerminalAction, ScrollToNextCommandAction, ScrollToPreviousCommandAction, ScrollToTopTerminalAction, ScrollUpPageTerminalAction, ScrollUpTerminalAction, SelectAllTerminalAction, SelectDefaultShellWindowsTerminalAction, SelectToNextCommandAction, SelectToNextLineAction, SelectToPreviousCommandAction, SelectToPreviousLineAction, SendSequenceTerminalCommand, SplitInActiveWorkspaceTerminalAction, SplitTerminalAction, TerminalPasteAction, TERMINAL_PICKER_PREFIX, ToggleCaseSensitiveCommand, ToggleEscapeSequenceLoggingAction, ToggleRegexCommand, ToggleTerminalAction, ToggleWholeWordCommand, NavigationModeFocusPreviousTerminalAction, NavigationModeFocusNextTerminalAction, NavigationModeExitTerminalAction, ManageWorkspaceShellPermissionsTerminalCommand, CreateNewWithCwdTerminalCommand } from 'vs/workbench/contrib/terminal/browser/terminalActions';
2424
import { TerminalPanel } from 'vs/workbench/contrib/terminal/browser/terminalPanel';
2525
import { TerminalPickerHandler } from 'vs/workbench/contrib/terminal/browser/terminalQuickOpen';
2626
import { KEYBINDING_CONTEXT_TERMINAL_FIND_WIDGET_FOCUSED, KEYBINDING_CONTEXT_TERMINAL_FIND_WIDGET_NOT_VISIBLE, KEYBINDING_CONTEXT_TERMINAL_FIND_WIDGET_VISIBLE, KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_TEXT_SELECTED, TERMINAL_PANEL_ID, DEFAULT_LETTER_SPACING, DEFAULT_LINE_HEIGHT, TerminalCursorStyle, TERMINAL_ACTION_CATEGORY, KEYBINDING_CONTEXT_TERMINAL_A11Y_TREE_FOCUS, TERMINAL_COMMAND_ID } from 'vs/workbench/contrib/terminal/common/terminal';
@@ -550,27 +550,43 @@ actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(FindPrevious, Fi
550550
mac: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_G, secondary: [KeyMod.Shift | KeyCode.F3, KeyCode.Enter] },
551551
}, KEYBINDING_CONTEXT_TERMINAL_FIND_WIDGET_FOCUSED), 'Terminal: Find previous');
552552

553-
554-
const sendSequenceTerminalCommand = new SendSequenceTerminalCommand({
553+
(new SendSequenceTerminalCommand({
555554
id: SendSequenceTerminalCommand.ID,
556555
precondition: undefined,
557556
description: {
558-
description: `Send Custom Sequence To Terminal`,
557+
description: SendSequenceTerminalCommand.LABEL,
559558
args: [{
560559
name: 'args',
561560
schema: {
562-
'type': 'object',
563-
'required': ['text'],
564-
'properties': {
565-
'text': {
566-
'type': 'string'
561+
type: 'object',
562+
required: ['text'],
563+
properties: {
564+
text: { type: 'string' }
565+
},
566+
}
567+
}]
568+
}
569+
})).register();
570+
(new CreateNewWithCwdTerminalCommand({
571+
id: CreateNewWithCwdTerminalCommand.ID,
572+
precondition: undefined,
573+
description: {
574+
description: CreateNewWithCwdTerminalCommand.LABEL,
575+
args: [{
576+
name: 'args',
577+
schema: {
578+
type: 'object',
579+
required: ['cwd'],
580+
properties: {
581+
cwd: {
582+
description: CreateNewWithCwdTerminalCommand.CWD_ARG_LABEL,
583+
type: 'string'
567584
}
568585
},
569586
}
570587
}]
571588
}
572-
});
573-
sendSequenceTerminalCommand.register();
589+
})).register();
574590

575591
setupTerminalCommands();
576592
setupTerminalMenu();

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

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,32 @@ export class SendSequenceTerminalCommand extends Command {
298298
}
299299
}
300300

301+
export class CreateNewWithCwdTerminalCommand extends Command {
302+
public static readonly ID = TERMINAL_COMMAND_ID.NEW_WITH_CWD;
303+
public static readonly LABEL = nls.localize('workbench.action.terminal.newWithCwd', "Create New Integrated Terminal Starting in a Custom Working Directory");
304+
public static readonly CWD_ARG_LABEL = nls.localize('workbench.action.terminal.newWithCwd.cwd', "The directory to start the terminal at");
305+
306+
public runCommand(accessor: ServicesAccessor, args: { cwd: string } | undefined): Promise<void> {
307+
const terminalService = accessor.get(ITerminalService);
308+
const configurationResolverService = accessor.get(IConfigurationResolverService);
309+
const workspaceContextService = accessor.get(IWorkspaceContextService);
310+
const historyService = accessor.get(IHistoryService);
311+
const activeWorkspaceRootUri = historyService.getLastActiveWorkspaceRoot(Schemas.file);
312+
const lastActiveWorkspaceRoot = activeWorkspaceRootUri ? withNullAsUndefined(workspaceContextService.getWorkspaceFolder(activeWorkspaceRootUri)) : undefined;
313+
314+
let cwd: string | undefined;
315+
if (args && args.cwd) {
316+
cwd = configurationResolverService.resolve(lastActiveWorkspaceRoot, args.cwd);
317+
}
318+
const instance = terminalService.createTerminal({ cwd });
319+
if (!instance) {
320+
return Promise.resolve(undefined);
321+
}
322+
terminalService.setActiveInstance(instance);
323+
return terminalService.showPanel(true);
324+
}
325+
}
326+
301327
export class CreateNewTerminalAction extends Action {
302328

303329
public static readonly ID = TERMINAL_COMMAND_ID.NEW;

src/vs/workbench/contrib/terminal/common/terminal.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,7 @@ export const enum TERMINAL_COMMAND_ID {
423423
MOVE_TO_LINE_START = 'workbench.action.terminal.moveToLineStart',
424424
MOVE_TO_LINE_END = 'workbench.action.terminal.moveToLineEnd',
425425
NEW = 'workbench.action.terminal.new',
426+
NEW_WITH_CWD = 'workbench.action.terminal.newWithCwd',
426427
NEW_LOCAL = 'workbench.action.terminal.newLocal',
427428
NEW_IN_ACTIVE_WORKSPACE = 'workbench.action.terminal.newInActiveWorkspace',
428429
SPLIT = 'workbench.action.terminal.split',

0 commit comments

Comments
 (0)