提交 09a9571c 编写于 作者: D Daniel Imms 提交者: GitHub

Merge pull request #20862 from hun1ahpu/focusTerminal

Add 'Focus to terminal X' action
......@@ -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, 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';
......@@ -142,9 +142,18 @@ configurationRegistry.registerConfiguration({
CreateNewTerminalAction.ID,
CopyTerminalSelectionAction.ID,
KillTerminalAction.ID,
FocusTerminalAction.ID,
FocusActiveTerminalAction.ID,
FocusPreviousTerminalAction.ID,
FocusNextTerminalAction.ID,
FocusTerminalByNumberAction.getId(1),
FocusTerminalByNumberAction.getId(2),
FocusTerminalByNumberAction.getId(3),
FocusTerminalByNumberAction.getId(4),
FocusTerminalByNumberAction.getId(5),
FocusTerminalByNumberAction.getId(6),
FocusTerminalByNumberAction.getId(7),
FocusTerminalByNumberAction.getId(8),
FocusTerminalByNumberAction.getId(9),
TerminalPasteAction.ID,
RunSelectedTextInTerminalAction.ID,
RunActiveFileInTerminalAction.ID,
......@@ -195,9 +204,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);
for (let i = 1; i < 10; i++) {
actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(FocusTerminalByNumberAction, FocusTerminalByNumberAction.getId(i), FocusTerminalByNumberAction.getLabel(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 },
......
......@@ -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,6 +141,34 @@ export class FocusNextTerminalAction extends Action {
}
}
export class FocusTerminalByNumberAction extends Action {
private static ID_PREFIX = 'workbench.action.terminal.focus';
constructor(
id: string, label: string,
@ITerminalService private terminalService: ITerminalService
) {
super(id, label);
}
public run(event?: any): TPromise<any> {
this.terminalService.setActiveInstanceByIndex(this.getTerminalNumber() - 1);
return this.terminalService.showPanel(true);
}
public static getId(n: number): string {
return FocusTerminalByNumberAction.ID_PREFIX + n;
}
public static getLabel(n: number): string {
return nls.localize('workbench.action.terminal.focusByNumber', 'Focus Terminal {0}', n);
}
private getTerminalNumber(): number {
return parseInt(this.id.substr(FocusTerminalByNumberAction.ID_PREFIX.length));
}
}
export class FocusPreviousTerminalAction extends Action {
public static ID = 'workbench.action.terminal.focusPrevious';
......
......@@ -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) => {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册