提交 7ddc8a6b 编写于 作者: D Daniel Imms

Add focus left/right that work on 2 instances

上级 fec3bf16
......@@ -165,6 +165,7 @@ export interface ITerminalService {
getActiveOrCreateInstance(wasNewTerminalAction?: boolean): ITerminalInstance;
splitInstanceVertically(instance: ITerminalInstance): void;
getActiveTab(): ITerminalTab;
setActiveTabToNext(): void;
setActiveTabToPrevious(): void;
setActiveTabByIndex(tabIndex: number): void;
......@@ -187,6 +188,8 @@ export interface ITerminalTab {
title: string;
onDisposed: Event<ITerminalTab>;
focusLeft(): void;
focusRight(): void;
setActiveInstanceByIndex(index: number): void;
attachToElement(element: HTMLElement): void;
setVisible(visible: boolean): void;
......
......@@ -105,7 +105,7 @@ export abstract class TerminalService implements ITerminalService {
console.log('_removeTab');
// Get the index of the tab and remove it from the list
const index = this._terminalTabs.indexOf(tab);
const wasActiveTab = tab === this._getActiveTab();
const wasActiveTab = tab === this.getActiveTab();
if (index !== -1) {
this._terminalTabs.splice(index, 1);
}
......@@ -132,7 +132,7 @@ export abstract class TerminalService implements ITerminalService {
}
}
private _getActiveTab(): ITerminalTab {
public getActiveTab(): ITerminalTab {
if (this._activeTabIndex < 0 || this._activeTabIndex >= this._terminalTabs.length) {
return null;
}
......@@ -140,7 +140,7 @@ export abstract class TerminalService implements ITerminalService {
}
public getActiveInstance(): ITerminalInstance {
const tab = this._getActiveTab();
const tab = this.getActiveTab();
if (!tab) {
return null;
}
......
......@@ -18,7 +18,7 @@ import { TERMINAL_DEFAULT_SHELL_UNIX_LIKE, TERMINAL_DEFAULT_SHELL_WINDOWS } from
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, CreateNewInActiveWorkspaceTerminalAction, 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, MoveToLineStartTerminalAction, MoveToLineEndTerminalAction, SplitVerticalTerminalAction } from 'vs/workbench/parts/terminal/electron-browser/terminalActions';
import { KillTerminalAction, CopyTerminalSelectionAction, CreateNewTerminalAction, CreateNewInActiveWorkspaceTerminalAction, 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, MoveToLineStartTerminalAction, MoveToLineEndTerminalAction, SplitVerticalTerminalAction, FocusTerminalLeftAction, FocusTerminalRightAction } 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';
......@@ -272,7 +272,10 @@ configurationRegistry.registerConfiguration({
MoveToLineStartTerminalAction.ID,
MoveToLineEndTerminalAction.ID,
TogglePanelAction.ID,
'workbench.action.quickOpenView'
'workbench.action.quickOpenView',
SplitVerticalTerminalAction.ID,
FocusTerminalLeftAction.ID,
FocusTerminalRightAction.ID
].sort()
},
'terminal.integrated.env.osx': {
......@@ -410,6 +413,14 @@ actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(MoveToLineEndTer
mac: { primary: KeyMod.CtrlCmd | KeyCode.RightArrow }
}, KEYBINDING_CONTEXT_TERMINAL_FOCUS), 'Terminal: Move To Line End', category);
actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(SplitVerticalTerminalAction, SplitVerticalTerminalAction.ID, SplitVerticalTerminalAction.LABEL), 'Terminal: Split Vertically', category);
actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(FocusTerminalLeftAction, FocusTerminalLeftAction.ID, FocusTerminalLeftAction.LABEL, {
primary: KeyMod.Alt | KeyCode.LeftArrow,
mac: { primary: KeyMod.Alt | KeyMod.CtrlCmd | KeyCode.LeftArrow }
}, KEYBINDING_CONTEXT_TERMINAL_FOCUS), 'Terminal: Focus Terminal To Left', category);
actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(FocusTerminalRightAction, FocusTerminalRightAction.ID, FocusTerminalRightAction.LABEL, {
primary: KeyMod.Alt | KeyCode.RightArrow,
mac: { primary: KeyMod.Alt | KeyMod.CtrlCmd | KeyCode.RightArrow }
}, KEYBINDING_CONTEXT_TERMINAL_FOCUS), 'Terminal: Focus Terminal To Right', category);
terminalCommands.setup();
......
......@@ -317,6 +317,48 @@ export class SplitVerticalTerminalAction extends Action {
}
}
export class FocusTerminalLeftAction extends Action {
public static readonly ID = 'workbench.action.terminal.focusTerminalLeft';
public static readonly LABEL = nls.localize('workbench.action.terminal.focusTerminalLeft', "Focus terminal to the left");
constructor(
id: string, label: string,
@ITerminalService private _terminalService: ITerminalService
) {
super(id, label);
}
public run(event?: any): TPromise<any> {
const tab = this._terminalService.getActiveTab();
if (!tab) {
return TPromise.as(void 0);
}
tab.focusLeft();
return this._terminalService.showPanel(true);
}
}
export class FocusTerminalRightAction extends Action {
public static readonly ID = 'workbench.action.terminal.focusTerminalRight';
public static readonly LABEL = nls.localize('workbench.action.terminal.focusTerminalRight', "Focus terminal to the right");
constructor(
id: string, label: string,
@ITerminalService private _terminalService: ITerminalService
) {
super(id, label);
}
public run(event?: any): TPromise<any> {
const tab = this._terminalService.getActiveTab();
if (!tab) {
return TPromise.as(void 0);
}
tab.focusRight();
return this._terminalService.showPanel(true);
}
}
export class FocusActiveTerminalAction extends Action {
public static readonly ID = 'workbench.action.terminal.focus';
......
......@@ -345,4 +345,14 @@ export class TerminalTab extends Disposable implements ITerminalTab {
console.log('TerminalTab.layout', width, height);
this._rootSplitPane.layoutBox(width, height);
}
public focusLeft(): void {
// TODO: Do a proper implementation for > 2 instances
this.setActiveInstanceByIndex(0);
}
public focusRight(): void {
// TODO: Do a proper implementation for > 2 instances
this.setActiveInstanceByIndex(1);
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册