mirror of
https://github.com/microsoft/vscode.git
synced 2026-07-10 05:28:19 -05:00
Implement workbench.action.terminal.runActiveFile
Fixes #19375 Related #19863
This commit is contained in:
@@ -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 }
|
||||
|
||||
@@ -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';
|
||||
|
||||
Reference in New Issue
Block a user