提交 549478a0 编写于 作者: D Daniel Imms

Add focusNext, focusPrevious commands, remove conflicting keybinding

上级 099352bc
......@@ -10,7 +10,7 @@ import {SyncActionDescriptor} from 'vs/platform/actions/common/actions';
import {registerSingleton} from 'vs/platform/instantiation/common/extensions';
import {IWorkbenchActionRegistry, Extensions as ActionExtensions} from 'vs/workbench/common/actionRegistry';
import {TerminalService} from 'vs/workbench/parts/terminal/electron-browser/terminalService';
import {CloseTerminalAction, CreateNewTerminalAction, FocusTerminalAction, ToggleTerminalAction} from 'vs/workbench/parts/terminal/electron-browser/terminalActions';
import {CloseTerminalAction, CreateNewTerminalAction, FocusTerminalAction, FocusNextTerminalAction, FocusPreviousTerminalAction, ToggleTerminalAction} from 'vs/workbench/parts/terminal/electron-browser/terminalActions';
import {ITerminalService, TERMINAL_PANEL_ID, TERMINAL_DEFAULT_SHELL_LINUX, TERMINAL_DEFAULT_SHELL_OSX, TERMINAL_DEFAULT_SHELL_WINDOWS} from 'vs/workbench/parts/terminal/electron-browser/terminal';
import * as panel from 'vs/workbench/browser/panel';
import {Registry} from 'vs/platform/platform';
......@@ -91,16 +91,15 @@ registerSingleton(ITerminalService, TerminalService);
// On mac cmd+` is reserved to cycle between windows, that's why the keybindings use WinCtrl
let actionRegistry = <IWorkbenchActionRegistry>Registry.as(ActionExtensions.WorkbenchActions);
actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(ToggleTerminalAction, ToggleTerminalAction.ID, ToggleTerminalAction.LABEL, {
primary: KeyMod.CtrlCmd | KeyCode.US_BACKTICK,
mac: { primary: KeyMod.WinCtrl | KeyCode.US_BACKTICK }
}), 'View: ' + ToggleTerminalAction.LABEL, nls.localize('viewCategory', "View"));
actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(FocusTerminalAction, FocusTerminalAction.ID, FocusTerminalAction.LABEL), FocusTerminalAction.LABEL);
actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(CloseTerminalAction, CloseTerminalAction.ID, CloseTerminalAction.LABEL), CloseTerminalAction.LABEL);
actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(CreateNewTerminalAction, CreateNewTerminalAction.ID, CreateNewTerminalAction.LABEL, {
primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.US_BACKTICK,
mac: { primary: KeyMod.WinCtrl | KeyMod.Shift | KeyCode.US_BACKTICK }
}), CreateNewTerminalAction.LABEL);
actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(CloseTerminalAction, CloseTerminalAction.ID, CloseTerminalAction.LABEL, {
primary: KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.KEY_X,
mac: { primary: KeyMod.WinCtrl | KeyMod.Shift | KeyCode.KEY_X }
}), CloseTerminalAction.LABEL);
actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(FocusTerminalAction, FocusTerminalAction.ID, FocusTerminalAction.LABEL), FocusTerminalAction.LABEL);
actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(FocusNextTerminalAction, FocusNextTerminalAction.ID, FocusNextTerminalAction.LABEL), CloseTerminalAction.LABEL);
actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(FocusPreviousTerminalAction, FocusPreviousTerminalAction.ID, FocusPreviousTerminalAction.LABEL), CloseTerminalAction.LABEL);
actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(ToggleTerminalAction, ToggleTerminalAction.ID, ToggleTerminalAction.LABEL, {
primary: KeyMod.CtrlCmd | KeyCode.US_BACKTICK,
mac: { primary: KeyMod.WinCtrl | KeyCode.US_BACKTICK }
}), 'View: ' + ToggleTerminalAction.LABEL, nls.localize('viewCategory', "View"));
......@@ -45,5 +45,7 @@ export interface ITerminalService {
close(): TPromise<any>;
createNew(): TPromise<any>;
focus(): TPromise<any>;
focusNext(): TPromise<any>;
focusPrevious(): TPromise<any>;
toggle(): TPromise<any>;
}
......@@ -74,4 +74,38 @@ export class FocusTerminalAction extends Action {
public run(event?: any): TPromise<any> {
return this.terminalService.focus();
}
}
export class FocusNextTerminalAction extends Action {
public static ID = 'workbench.action.terminal.focusNext';
public static LABEL = nls.localize('workbench.action.terminal.focusNext', "Terminal: Focus Next Terminal");
constructor(
id: string, label: string,
@ITerminalService private terminalService: ITerminalService
) {
super(id, label);
}
public run(event?: any): TPromise<any> {
return this.terminalService.focusNext();
}
}
export class FocusPreviousTerminalAction extends Action {
public static ID = 'workbench.action.terminal.focusPrevious';
public static LABEL = nls.localize('workbench.action.terminal.focusPrevious', "Terminal: Focus Previous Terminal");
constructor(
id: string, label: string,
@ITerminalService private terminalService: ITerminalService
) {
super(id, label);
}
public run(event?: any): TPromise<any> {
return this.terminalService.focusPrevious();
}
}
\ No newline at end of file
......@@ -158,13 +158,34 @@ export class TerminalPanel extends Panel {
this.layout(new Dimension(this.parentDomElement.offsetWidth, this.parentDomElement.offsetHeight));
}
public focus(): void {
if (this.terminalInstances.length > 0) {
this.terminalInstances[this.activeTerminalIndex].focus(true);
}
}
public focusNext(): void {
if (this.terminalInstances.length > 1) {
this.activeTerminalIndex++;
if (this.activeTerminalIndex >= this.terminalInstances.length) {
this.activeTerminalIndex = 0;
}
this.setActiveTerminal(this.activeTerminalIndex);
this.focus();
}
}
public focusPrevious(): void {
if (this.terminalInstances.length > 1) {
this.activeTerminalIndex--;
if (this.activeTerminalIndex < 0) {
this.activeTerminalIndex = this.terminalInstances.length - 1;
}
this.setActiveTerminal(this.activeTerminalIndex);
this.focus();
}
}
public dispose(): void {
this.toDispose = lifecycle.dispose(this.toDispose);
while (this.terminalInstances.length > 0) {
......
......@@ -22,6 +22,32 @@ export class TerminalService implements ITerminalService {
return this.panelService.openPanel(TERMINAL_PANEL_ID, true);
}
public focusNext(): TPromise<any> {
return this.focus().then(() => {
let panel = this.panelService.getActivePanel();
if (!panel || panel.getId() !== TERMINAL_PANEL_ID) {
return this.toggle().then(() => {
panel = this.panelService.getActivePanel();
return (<TerminalPanel>panel).focusNext();
});
}
return (<TerminalPanel>panel).focusNext();
});
}
public focusPrevious(): TPromise<any> {
return this.focus().then(() => {
let panel = this.panelService.getActivePanel();
if (!panel || panel.getId() !== TERMINAL_PANEL_ID) {
return this.toggle().then(() => {
panel = this.panelService.getActivePanel();
return (<TerminalPanel>panel).focusPrevious();
});
}
return (<TerminalPanel>panel).focusPrevious();
});
}
public toggle(): TPromise<any> {
const panel = this.panelService.getActivePanel();
if (panel && panel.getId() === TERMINAL_PANEL_ID) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册