From 9c8cdceb061d79aa395ed64b9d505f55ade66fd9 Mon Sep 17 00:00:00 2001 From: hun1ahpu Date: Sat, 18 Feb 2017 17:51:00 +0100 Subject: [PATCH] Added FocusTerminalByNumberAction --- .../electron-browser/terminal.contribution.ts | 11 ++++++----- .../terminal/electron-browser/terminalActions.ts | 16 ++++++++++------ .../terminal/electron-browser/terminalService.ts | 3 +++ 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.ts b/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.ts index fe6eea1ae0f..9ffd9c905a9 100644 --- a/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.ts +++ b/src/vs/workbench/parts/terminal/electron-browser/terminal.contribution.ts @@ -16,7 +16,7 @@ import { TERMINAL_DEFAULT_SHELL_LINUX, TERMINAL_DEFAULT_SHELL_OSX, TERMINAL_DEFA import { IWorkbenchActionRegistry, Extensions as ActionExtensions } from 'vs/workbench/common/actionRegistry'; import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; -import { KillTerminalAction, CopyTerminalSelectionAction, CreateNewTerminalAction, FocusTerminalAction, FocusNextTerminalAction, FocusPreviousTerminalAction, FocusTerminal1Action, RunSelectedTextInTerminalAction, RunActiveFileInTerminalAction, ScrollDownTerminalAction, ScrollDownPageTerminalAction, ScrollToBottomTerminalAction, ScrollUpTerminalAction, ScrollUpPageTerminalAction, ScrollToTopTerminalAction, TerminalPasteAction, ToggleTerminalAction, ClearTerminalAction } from 'vs/workbench/parts/terminal/electron-browser/terminalActions'; +import { KillTerminalAction, CopyTerminalSelectionAction, CreateNewTerminalAction, FocusActiveTerminalAction, FocusNextTerminalAction, FocusPreviousTerminalAction, FocusTerminalByNumberAction, RunSelectedTextInTerminalAction, RunActiveFileInTerminalAction, ScrollDownTerminalAction, ScrollDownPageTerminalAction, ScrollToBottomTerminalAction, ScrollUpTerminalAction, ScrollUpPageTerminalAction, ScrollToTopTerminalAction, TerminalPasteAction, ToggleTerminalAction, ClearTerminalAction } from 'vs/workbench/parts/terminal/electron-browser/terminalActions'; import { Registry } from 'vs/platform/platform'; import { ShowAllCommandsAction } from 'vs/workbench/parts/quickopen/browser/commandsHandler'; import { SyncActionDescriptor } from 'vs/platform/actions/common/actions'; @@ -147,10 +147,9 @@ configurationRegistry.registerConfiguration({ CreateNewTerminalAction.ID, CopyTerminalSelectionAction.ID, KillTerminalAction.ID, - FocusTerminalAction.ID, + FocusActiveTerminalAction.ID, FocusPreviousTerminalAction.ID, FocusNextTerminalAction.ID, - // TODO: should add other focus terminal actions here? TerminalPasteAction.ID, RunSelectedTextInTerminalAction.ID, RunActiveFileInTerminalAction.ID, @@ -201,10 +200,12 @@ 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(FocusTerminalAction, FocusTerminalAction.ID, FocusTerminalAction.LABEL), 'Terminal: Focus Terminal', category); +actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(FocusActiveTerminalAction, FocusActiveTerminalAction.ID, FocusActiveTerminalAction.LABEL), 'Terminal: Focus Active 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); -actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(FocusTerminal1Action, FocusTerminal1Action.ID, FocusTerminal1Action.LABEL), 'Terminal: Focus Terminal 1', category); +for (let i = 0; i < 10; i++) { + actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(FocusTerminalByNumberAction, FocusTerminalByNumberAction.ID(i), FocusTerminalByNumberAction.LABEL(i)), 'Terminal: Focus Terminal ' + i, category); +} actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(TerminalPasteAction, TerminalPasteAction.ID, TerminalPasteAction.LABEL, { primary: KeyMod.CtrlCmd | KeyCode.KEY_V, linux: { primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_V }, diff --git a/src/vs/workbench/parts/terminal/electron-browser/terminalActions.ts b/src/vs/workbench/parts/terminal/electron-browser/terminalActions.ts index 7b0b136ecb7..be32d93ec73 100644 --- a/src/vs/workbench/parts/terminal/electron-browser/terminalActions.ts +++ b/src/vs/workbench/parts/terminal/electron-browser/terminalActions.ts @@ -101,7 +101,7 @@ export class CreateNewTerminalAction extends Action { } } -export class FocusTerminalAction extends Action { +export class FocusActiveTerminalAction extends Action { public static ID = 'workbench.action.terminal.focus'; public static LABEL = nls.localize('workbench.action.terminal.focus', "Focus Terminal"); @@ -141,10 +141,10 @@ export class FocusNextTerminalAction extends Action { } } -export class FocusTerminal1Action extends Action { - - public static ID = 'workbench.action.terminal.focus1'; - public static LABEL = nls.localize('workbench.action.terminal.focus1', "Focus Terminal 1"); +export class FocusTerminalByNumberAction extends Action { + private static ID_PREFIX = 'workbench.action.terminal.focus'; + public static ID = (n: number) => FocusTerminalByNumberAction.ID_PREFIX + n; + public static LABEL = (n: number) => nls.localize(`workbench.action.terminal.focusByNumber${n}`, `Focus Terminal ${n}`); constructor( id: string, label: string, @@ -154,9 +154,13 @@ export class FocusTerminal1Action extends Action { } public run(event?: any): TPromise { - this.terminalService.setActiveInstanceByIndex(0); + this.terminalService.setActiveInstanceByIndex(this.getTerminalNumber() - 1); return this.terminalService.showPanel(true); } + + private getTerminalNumber(): number { + return parseInt(this.id.substr(FocusTerminalByNumberAction.ID_PREFIX.length)); + } } export class FocusPreviousTerminalAction extends Action { diff --git a/src/vs/workbench/parts/terminal/electron-browser/terminalService.ts b/src/vs/workbench/parts/terminal/electron-browser/terminalService.ts index 0b418320fbd..43889b002e6 100644 --- a/src/vs/workbench/parts/terminal/electron-browser/terminalService.ts +++ b/src/vs/workbench/parts/terminal/electron-browser/terminalService.ts @@ -125,6 +125,9 @@ export class TerminalService implements ITerminalService { } public setActiveInstanceByIndex(terminalIndex: number): void { + if (terminalIndex >= this._terminalInstances.length) { + return; + } const didInstanceChange = this._activeTerminalInstanceIndex !== terminalIndex; this._activeTerminalInstanceIndex = terminalIndex; this._terminalInstances.forEach((terminalInstance, i) => {