Implement workbench.action.terminal.runActiveFile

Fixes #19375
Related #19863
This commit is contained in:
Daniel Imms
2017-02-03 17:01:50 -08:00
parent b24bbdf666
commit e325decc99
2 changed files with 36 additions and 1 deletions

View File

@@ -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, ScrollDownTerminalAction, ScrollDownPageTerminalAction, ScrollToBottomTerminalAction, ScrollUpTerminalAction, ScrollUpPageTerminalAction, ScrollToTopTerminalAction, TerminalPasteAction, ToggleTerminalAction, ClearTerminalAction } from 'vs/workbench/parts/terminal/electron-browser/terminalActions';
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 { Registry } from 'vs/platform/platform';
import { ShowAllCommandsAction } from 'vs/workbench/parts/quickopen/browser/commandsHandler';
import { SyncActionDescriptor } from 'vs/platform/actions/common/actions';
@@ -152,6 +152,7 @@ configurationRegistry.registerConfiguration({
FocusNextTerminalAction.ID,
TerminalPasteAction.ID,
RunSelectedTextInTerminalAction.ID,
RunActiveFileInTerminalAction.ID,
ToggleTerminalAction.ID,
ScrollDownTerminalAction.ID,
ScrollDownPageTerminalAction.ID,
@@ -209,6 +210,7 @@ actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(TerminalPasteAct
mac: { primary: null }
}, KEYBINDING_CONTEXT_TERMINAL_FOCUS), 'Terminal: Paste into Active Terminal', category);
actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(RunSelectedTextInTerminalAction, RunSelectedTextInTerminalAction.ID, RunSelectedTextInTerminalAction.LABEL), 'Terminal: Run Selected Text In Active Terminal', category);
actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(RunActiveFileInTerminalAction, RunActiveFileInTerminalAction.ID, RunActiveFileInTerminalAction.LABEL), 'Terminal: Run Active File In Active Terminal', category);
actionRegistry.registerWorkbenchAction(new SyncActionDescriptor(ToggleTerminalAction, ToggleTerminalAction.ID, ToggleTerminalAction.LABEL, {
primary: KeyMod.CtrlCmd | KeyCode.US_BACKTICK,
mac: { primary: KeyMod.WinCtrl | KeyCode.US_BACKTICK }

View File

@@ -14,6 +14,7 @@ import { TPromise } from 'vs/base/common/winjs.base';
import { TogglePanelAction } from 'vs/workbench/browser/panel';
import { IPartService } from 'vs/workbench/services/part/common/partService';
import { IPanelService } from 'vs/workbench/services/panel/common/panelService';
import { IMessageService, Severity } from 'vs/platform/message/common/message';
export class ToggleTerminalAction extends TogglePanelAction {
@@ -213,6 +214,38 @@ export class RunSelectedTextInTerminalAction extends Action {
}
}
export class RunActiveFileInTerminalAction extends Action {
public static ID = 'workbench.action.terminal.runActiveFile';
public static LABEL = nls.localize('workbench.action.terminal.runActiveFile', "Run Active File In Active Terminal");
constructor(
id: string, label: string,
@ICodeEditorService private codeEditorService: ICodeEditorService,
@ITerminalService private terminalService: ITerminalService,
@IMessageService private messageService: IMessageService
) {
super(id, label);
}
public run(event?: any): TPromise<any> {
let terminalInstance = this.terminalService.getActiveInstance();
if (!terminalInstance) {
terminalInstance = this.terminalService.createInstance();
}
const editor = this.codeEditorService.getFocusedCodeEditor();
if (editor) {
const uri = editor.getModel().uri;
if (uri.scheme === 'file') {
terminalInstance.sendText(uri.fsPath, true);
} else {
this.messageService.show(Severity.Warning, nls.localize('workbench.action.terminal.runActiveFile.noFile', 'Only files on disk can be run in the terminal'));
}
}
return TPromise.as(void 0);
}
}
export class SwitchTerminalInstanceAction extends Action {
public static ID = 'workbench.action.terminal.switchTerminalInstance';