mirror of
https://github.com/Microsoft/vscode
synced 2024-10-30 11:10:48 +00:00
Merge pull request #36287 from Microsoft/tyriar/34163
Changes new terminal actions to show workspace selector
This commit is contained in:
commit
dec5412de2
4 changed files with 49 additions and 11 deletions
|
@ -14,6 +14,8 @@ import { IPanelService } from 'vs/workbench/services/panel/common/panelService';
|
|||
import { ContributableActionProvider } from 'vs/workbench/browser/actions';
|
||||
import { stripWildcards } from 'vs/base/common/strings';
|
||||
import { matchesFuzzy } from 'vs/base/common/filters';
|
||||
import { ICommandService } from 'vs/platform/commands/common/commands';
|
||||
import { PICK_WORKSPACE_FOLDER_COMMAND } from 'vs/workbench/browser/actions/workspaceActions';
|
||||
|
||||
export class TerminalEntry extends QuickOpenEntry {
|
||||
|
||||
|
@ -49,7 +51,8 @@ export class CreateTerminal extends QuickOpenEntry {
|
|||
|
||||
constructor(
|
||||
private label: string,
|
||||
private terminalService: ITerminalService
|
||||
private terminalService: ITerminalService,
|
||||
private commandService: ICommandService
|
||||
) {
|
||||
super();
|
||||
}
|
||||
|
@ -65,9 +68,14 @@ export class CreateTerminal extends QuickOpenEntry {
|
|||
public run(mode: Mode, context: IEntryRunContext): boolean {
|
||||
if (mode === Mode.OPEN) {
|
||||
setTimeout(() => {
|
||||
const newTerminal = this.terminalService.createInstance();
|
||||
this.terminalService.setActiveInstance(newTerminal);
|
||||
this.terminalService.showPanel(true);
|
||||
return this.commandService.executeCommand(PICK_WORKSPACE_FOLDER_COMMAND).then(workspace => {
|
||||
const instance = this.terminalService.createInstance({ cwd: workspace.uri.fsPath }, true);
|
||||
if (!instance) {
|
||||
return TPromise.as(void 0);
|
||||
}
|
||||
this.terminalService.setActiveInstance(instance);
|
||||
return this.terminalService.showPanel(true);
|
||||
});
|
||||
}, 0);
|
||||
return true;
|
||||
}
|
||||
|
@ -82,6 +90,7 @@ export class TerminalPickerHandler extends QuickOpenHandler {
|
|||
|
||||
constructor(
|
||||
@ITerminalService private terminalService: ITerminalService,
|
||||
@ICommandService private commandService: ICommandService,
|
||||
@IPanelService private panelService: IPanelService
|
||||
) {
|
||||
super();
|
||||
|
@ -92,7 +101,7 @@ export class TerminalPickerHandler extends QuickOpenHandler {
|
|||
const normalizedSearchValueLowercase = stripWildcards(searchValue).toLowerCase();
|
||||
|
||||
const terminalEntries: QuickOpenEntry[] = this.getTerminals();
|
||||
terminalEntries.push(new CreateTerminal(nls.localize("'workbench.action.terminal.newplus", "$(plus) Create New Integrated Terminal"), this.terminalService));
|
||||
terminalEntries.push(new CreateTerminal(nls.localize("'workbench.action.terminal.newplus", "$(plus) Create New Integrated Terminal"), this.terminalService, this.commandService));
|
||||
|
||||
const entries = terminalEntries.filter(e => {
|
||||
if (!searchValue) {
|
||||
|
|
|
@ -18,7 +18,7 @@ import { TERMINAL_DEFAULT_SHELL_LINUX, TERMINAL_DEFAULT_SHELL_OSX, TERMINAL_DEFA
|
|||
import { IWorkbenchActionRegistry, Extensions as ActionExtensions } from 'vs/workbench/common/actions';
|
||||
import { KeyCode, KeyMod } from 'vs/base/common/keyCodes';
|
||||
import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';
|
||||
import { KillTerminalAction, CopyTerminalSelectionAction, CreateNewTerminalAction, FocusActiveTerminalAction, FocusNextTerminalAction, FocusPreviousTerminalAction, SelectDefaultShellWindowsTerminalAction, RunSelectedTextInTerminalAction, RunActiveFileInTerminalAction, ScrollDownTerminalAction, ScrollDownPageTerminalAction, ScrollToBottomTerminalAction, ScrollUpTerminalAction, ScrollUpPageTerminalAction, ScrollToTopTerminalAction, TerminalPasteAction, ToggleTerminalAction, ClearTerminalAction, AllowWorkspaceShellTerminalCommand, DisallowWorkspaceShellTerminalCommand, RenameTerminalAction, SelectAllTerminalAction, FocusTerminalFindWidgetAction, HideTerminalFindWidgetAction, ShowNextFindTermTerminalFindWidgetAction, ShowPreviousFindTermTerminalFindWidgetAction, DeleteWordLeftTerminalAction, DeleteWordRightTerminalAction, QuickOpenActionTermContributor, QuickOpenTermAction, TERMINAL_PICKER_PREFIX } from 'vs/workbench/parts/terminal/electron-browser/terminalActions';
|
||||
import { KillTerminalAction, CopyTerminalSelectionAction, CreateNewTerminalAction, FocusActiveTerminalAction, FocusNextTerminalAction, FocusPreviousTerminalAction, SelectDefaultShellWindowsTerminalAction, RunSelectedTextInTerminalAction, RunActiveFileInTerminalAction, ScrollDownTerminalAction, ScrollDownPageTerminalAction, ScrollToBottomTerminalAction, ScrollUpTerminalAction, ScrollUpPageTerminalAction, ScrollToTopTerminalAction, TerminalPasteAction, ToggleTerminalAction, ClearTerminalAction, AllowWorkspaceShellTerminalCommand, DisallowWorkspaceShellTerminalCommand, RenameTerminalAction, SelectAllTerminalAction, FocusTerminalFindWidgetAction, HideTerminalFindWidgetAction, ShowNextFindTermTerminalFindWidgetAction, ShowPreviousFindTermTerminalFindWidgetAction, DeleteWordLeftTerminalAction, DeleteWordRightTerminalAction, QuickOpenActionTermContributor, QuickOpenTermAction, TERMINAL_PICKER_PREFIX, CreateNewSelectWorkspaceTerminalAction } from 'vs/workbench/parts/terminal/electron-browser/terminalActions';
|
||||
import { Registry } from 'vs/platform/registry/common/platform';
|
||||
import { ShowAllCommandsAction } from 'vs/workbench/parts/quickopen/browser/commandsHandler';
|
||||
import { SyncActionDescriptor } from 'vs/platform/actions/common/actions';
|
||||
|
@ -187,6 +187,7 @@ configurationRegistry.registerConfiguration({
|
|||
QUICKOPEN_ACTION_ID,
|
||||
ShowAllCommandsAction.ID,
|
||||
CreateNewTerminalAction.ID,
|
||||
CreateNewSelectWorkspaceTerminalAction.ID,
|
||||
CopyTerminalSelectionAction.ID,
|
||||
KillTerminalAction.ID,
|
||||
FocusActiveTerminalAction.ID,
|
||||
|
@ -279,6 +280,7 @@ actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(CreateNewTermina
|
|||
primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.US_BACKTICK,
|
||||
mac: { primary: KeyMod.WinCtrl | KeyMod.Shift | KeyCode.US_BACKTICK }
|
||||
}), 'Terminal: Create New Integrated Terminal', category);
|
||||
actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(CreateNewSelectWorkspaceTerminalAction, CreateNewSelectWorkspaceTerminalAction.ID, CreateNewSelectWorkspaceTerminalAction.LABEL), 'Terminal: Create New Integrated Terminal (Select Workspace)', category);
|
||||
actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(FocusActiveTerminalAction, FocusActiveTerminalAction.ID, FocusActiveTerminalAction.LABEL), 'Terminal: Focus Terminal', category);
|
||||
actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(FocusNextTerminalAction, FocusNextTerminalAction.ID, FocusNextTerminalAction.LABEL), 'Terminal: Focus Next Terminal', category);
|
||||
actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(FocusPreviousTerminalAction, FocusPreviousTerminalAction.ID, FocusPreviousTerminalAction.LABEL), 'Terminal: Focus Previous Terminal', category);
|
||||
|
|
|
@ -21,6 +21,8 @@ import { IQuickOpenService } from 'vs/platform/quickOpen/common/quickOpen';
|
|||
import { ActionBarContributor } from 'vs/workbench/browser/actions';
|
||||
import { TerminalEntry } from 'vs/workbench/parts/terminal/browser/terminalQuickOpen';
|
||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||
import { ICommandService } from 'vs/platform/commands/common/commands';
|
||||
import { PICK_WORKSPACE_FOLDER_COMMAND } from 'vs/workbench/browser/actions/workspaceActions';
|
||||
|
||||
export const TERMINAL_PICKER_PREFIX = 'term ';
|
||||
|
||||
|
@ -196,14 +198,12 @@ export class CreateNewTerminalAction extends Action {
|
|||
|
||||
public static ID = 'workbench.action.terminal.new';
|
||||
public static LABEL = nls.localize('workbench.action.terminal.new', "Create New Integrated Terminal");
|
||||
public static PANEL_LABEL = nls.localize('workbench.action.terminal.new.short', "New Terminal");
|
||||
|
||||
constructor(
|
||||
id: string, label: string,
|
||||
@ITerminalService private terminalService: ITerminalService
|
||||
) {
|
||||
super(id, label);
|
||||
this.class = 'terminal-action new';
|
||||
}
|
||||
|
||||
public run(event?: any): TPromise<any> {
|
||||
|
@ -216,6 +216,33 @@ export class CreateNewTerminalAction extends Action {
|
|||
}
|
||||
}
|
||||
|
||||
export class CreateNewSelectWorkspaceTerminalAction extends Action {
|
||||
|
||||
public static ID = 'workbench.action.terminal.newSelectWorkspace';
|
||||
public static LABEL = nls.localize('workbench.action.terminal.newSelectWorkspace', "Create New Integrated Terminal (Select Workspace)");
|
||||
public static PANEL_LABEL = nls.localize('workbench.action.terminal.new.short', "New Terminal");
|
||||
|
||||
constructor(
|
||||
id: string, label: string,
|
||||
@ITerminalService private terminalService: ITerminalService,
|
||||
@ICommandService private commandService: ICommandService
|
||||
) {
|
||||
super(id, label);
|
||||
this.class = 'terminal-action new';
|
||||
}
|
||||
|
||||
public run(event?: any): TPromise<any> {
|
||||
return this.commandService.executeCommand(PICK_WORKSPACE_FOLDER_COMMAND).then(workspace => {
|
||||
const instance = this.terminalService.createInstance({ cwd: workspace.uri.fsPath }, true);
|
||||
if (!instance) {
|
||||
return TPromise.as(void 0);
|
||||
}
|
||||
this.terminalService.setActiveInstance(instance);
|
||||
return this.terminalService.showPanel(true);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export class FocusActiveTerminalAction extends Action {
|
||||
|
||||
public static ID = 'workbench.action.terminal.focus';
|
||||
|
|
|
@ -19,7 +19,7 @@ import { ITerminalService, ITerminalFont, TERMINAL_PANEL_ID } from 'vs/workbench
|
|||
import { IThemeService, ITheme } from 'vs/platform/theme/common/themeService';
|
||||
import { TerminalFindWidget } from './terminalFindWidget';
|
||||
import { editorHoverBackground, editorHoverBorder, editorForeground } from 'vs/platform/theme/common/colorRegistry';
|
||||
import { KillTerminalAction, CreateNewTerminalAction, SwitchTerminalInstanceAction, SwitchTerminalInstanceActionItem, CopyTerminalSelectionAction, TerminalPasteAction, ClearTerminalAction, SelectAllTerminalAction } from 'vs/workbench/parts/terminal/electron-browser/terminalActions';
|
||||
import { KillTerminalAction, CreateNewSelectWorkspaceTerminalAction, SwitchTerminalInstanceAction, SwitchTerminalInstanceActionItem, CopyTerminalSelectionAction, TerminalPasteAction, ClearTerminalAction, SelectAllTerminalAction } from 'vs/workbench/parts/terminal/electron-browser/terminalActions';
|
||||
import { Panel } from 'vs/workbench/browser/panel';
|
||||
import { StandardMouseEvent } from 'vs/base/browser/mouseEvent';
|
||||
import { TPromise } from 'vs/base/common/winjs.base';
|
||||
|
@ -115,7 +115,7 @@ export class TerminalPanel extends Panel {
|
|||
if (!this._actions) {
|
||||
this._actions = [
|
||||
this._instantiationService.createInstance(SwitchTerminalInstanceAction, SwitchTerminalInstanceAction.ID, SwitchTerminalInstanceAction.LABEL),
|
||||
this._instantiationService.createInstance(CreateNewTerminalAction, CreateNewTerminalAction.ID, CreateNewTerminalAction.PANEL_LABEL),
|
||||
this._instantiationService.createInstance(CreateNewSelectWorkspaceTerminalAction, CreateNewSelectWorkspaceTerminalAction.ID, CreateNewSelectWorkspaceTerminalAction.PANEL_LABEL),
|
||||
this._instantiationService.createInstance(KillTerminalAction, KillTerminalAction.ID, KillTerminalAction.PANEL_LABEL)
|
||||
];
|
||||
this._actions.forEach(a => {
|
||||
|
@ -129,7 +129,7 @@ export class TerminalPanel extends Panel {
|
|||
if (!this._contextMenuActions) {
|
||||
this._copyContextMenuAction = this._instantiationService.createInstance(CopyTerminalSelectionAction, CopyTerminalSelectionAction.ID, nls.localize('copy', "Copy"));
|
||||
this._contextMenuActions = [
|
||||
this._instantiationService.createInstance(CreateNewTerminalAction, CreateNewTerminalAction.ID, nls.localize('createNewTerminal', "New Terminal")),
|
||||
this._instantiationService.createInstance(CreateNewSelectWorkspaceTerminalAction, CreateNewSelectWorkspaceTerminalAction.ID, CreateNewSelectWorkspaceTerminalAction.PANEL_LABEL),
|
||||
new Separator(),
|
||||
this._copyContextMenuAction,
|
||||
this._instantiationService.createInstance(TerminalPasteAction, TerminalPasteAction.ID, nls.localize('paste', "Paste")),
|
||||
|
|
Loading…
Reference in a new issue