diff --git a/src/vs/workbench/parts/execution/electron-browser/terminal.contribution.ts b/src/vs/workbench/parts/execution/browser/execution.contribution.ts similarity index 73% rename from src/vs/workbench/parts/execution/electron-browser/terminal.contribution.ts rename to src/vs/workbench/parts/execution/browser/execution.contribution.ts index 32dc188989ffcd1de4ed24091dd84b7336444e14..18055a95911e262e6bea2daadb3ecfc50f334f8c 100644 --- a/src/vs/workbench/parts/execution/electron-browser/terminal.contribution.ts +++ b/src/vs/workbench/parts/execution/browser/execution.contribution.ts @@ -11,9 +11,9 @@ import baseplatform = require('vs/base/common/platform'); import { IAction, Action } from 'vs/base/common/actions'; import { IWorkbenchActionRegistry, Extensions as ActionExtensions } from 'vs/workbench/common/actionRegistry'; import paths = require('vs/base/common/paths'); -import { Scope, IActionBarRegistry, Extensions as ActionBarExtensions, ActionBarContributor } from 'vs/workbench/browser/actions'; +import { ActionBarContributor } from 'vs/workbench/browser/actions'; import uri from 'vs/base/common/uri'; -import { explorerItemToFileResource } from 'vs/workbench/parts/files/common/files'; +import { explorerItemToFileResource, IFilesConfiguration } from 'vs/workbench/parts/files/common/files'; import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; import { ITerminalService } from 'vs/workbench/parts/execution/common/execution'; import { ITerminalService as IIntegratedTerminalService, KEYBINDING_CONTEXT_TERMINAL_NOT_FOCUSED } from 'vs/workbench/parts/terminal/common/terminal'; @@ -23,50 +23,8 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/editorService'; import { toResource } from 'vs/workbench/common/editor'; import { KeyMod, KeyCode } from 'vs/base/common/keyCodes'; -import { Extensions, IConfigurationRegistry } from 'vs/platform/configuration/common/configurationRegistry'; -import { ITerminalConfiguration, DEFAULT_TERMINAL_WINDOWS, DEFAULT_TERMINAL_LINUX_READY, DEFAULT_TERMINAL_OSX } from 'vs/workbench/parts/execution/electron-browser/terminal'; import { IHistoryService } from 'vs/workbench/services/history/common/history'; -DEFAULT_TERMINAL_LINUX_READY.then(defaultTerminalLinux => { - let configurationRegistry = Registry.as(Extensions.Configuration); - configurationRegistry.registerConfiguration({ - 'id': 'externalTerminal', - 'order': 100, - 'title': nls.localize('terminalConfigurationTitle', "External Terminal"), - 'type': 'object', - 'properties': { - 'terminal.terminalKind': { - 'type': 'string', - 'enum': [ - 'external', - 'integrated' - ], - 'description': nls.localize('terminal.terminalKind', "Customizes what kind of terminal to launch."), - 'default': 'external', - 'isExecutable': false - }, - 'terminal.external.windowsExec': { - 'type': 'string', - 'description': nls.localize('terminal.external.windowsExec', "Customizes which terminal to run on Windows."), - 'default': DEFAULT_TERMINAL_WINDOWS, - 'isExecutable': true - }, - 'terminal.external.osxExec': { - 'type': 'string', - 'description': nls.localize('terminal.external.osxExec', "Customizes which terminal application to run on OS X."), - 'default': DEFAULT_TERMINAL_OSX, - 'isExecutable': true - }, - 'terminal.external.linuxExec': { - 'type': 'string', - 'description': nls.localize('terminal.external.linuxExec', "Customizes which terminal to run on Linux."), - 'default': defaultTerminalLinux, - 'isExecutable': true - } - } - }); -}); - export abstract class AbstarctOpenInTerminalAction extends Action { private resource: uri; @@ -138,7 +96,7 @@ export class OpenConsoleAction extends AbstarctOpenInTerminalAction { export class OpenIntegratedTerminalAction extends AbstarctOpenInTerminalAction { public static ID = 'workbench.action.terminal.openFolderInIntegratedTerminal'; - public static Label = nls.localize('scopedConsoleActionMacLinux', "Open in Terminal"); + public static Label = nls.localize('openFolderInIntegratedTerminal', "Open in Integrated Terminal"); constructor( id: string, @@ -165,7 +123,7 @@ export class OpenIntegratedTerminalAction extends AbstarctOpenInTerminalAction { } } -class ExplorerViewerActionContributor extends ActionBarContributor { +export class ExplorerViewerActionContributor extends ActionBarContributor { constructor( @IInstantiationService private instantiationService: IInstantiationService, @@ -187,8 +145,8 @@ class ExplorerViewerActionContributor extends ActionBarContributor { resource = uri.file(paths.dirname(resource.fsPath)); } - const configuration = this.configurationService.getConfiguration(); - const terminalKind = configuration.terminal.terminalKind; + const configuration = this.configurationService.getConfiguration(); + const terminalKind = configuration.explorer.openInTerminalKind; if (terminalKind === 'integrated') { let action = this.instantiationService.createInstance(OpenIntegratedTerminalAction, OpenIntegratedTerminalAction.ID, OpenIntegratedTerminalAction.Label); @@ -204,9 +162,6 @@ class ExplorerViewerActionContributor extends ActionBarContributor { } } -const actionBarRegistry = Registry.as(ActionBarExtensions.Actionbar); -actionBarRegistry.registerActionBarContributor(Scope.VIEWER, ExplorerViewerActionContributor); - // Register Global Action to Open Console Registry.as(ActionExtensions.WorkbenchActions).registerWorkbenchAction( new SyncActionDescriptor( diff --git a/src/vs/workbench/parts/execution/electron-browser/execution.contribution.ts b/src/vs/workbench/parts/execution/electron-browser/execution.contribution.ts index d0efdbaa2ae335a2be1eeafed760e2f74c4e4c3f..353295671daf4a6f98404c369359130b16f92953 100644 --- a/src/vs/workbench/parts/execution/electron-browser/execution.contribution.ts +++ b/src/vs/workbench/parts/execution/electron-browser/execution.contribution.ts @@ -4,10 +4,15 @@ *--------------------------------------------------------------------------------------------*/ 'use strict'; +import * as nls from 'vs/nls'; import * as env from 'vs/base/common/platform'; -import { WinTerminalService, MacTerminalService, LinuxTerminalService } from 'vs/workbench/parts/execution/electron-browser/terminalService'; +import { Registry } from 'vs/platform/registry/common/platform'; +import { Extensions, IConfigurationRegistry } from 'vs/platform/configuration/common/configurationRegistry'; import { registerSingleton } from 'vs/platform/instantiation/common/extensions'; +import { DEFAULT_TERMINAL_WINDOWS, DEFAULT_TERMINAL_LINUX_READY, DEFAULT_TERMINAL_OSX } from 'vs/workbench/parts/execution/electron-browser/terminal'; +import { WinTerminalService, MacTerminalService, LinuxTerminalService } from 'vs/workbench/parts/execution/electron-browser/terminalService'; import { ITerminalService } from 'vs/workbench/parts/execution/common/execution'; +import 'vs/workbench/parts/execution/browser/terminal.contribution'; if (env.isWindows) { registerSingleton(ITerminalService, WinTerminalService); @@ -16,3 +21,34 @@ if (env.isWindows) { } else if (env.isLinux) { registerSingleton(ITerminalService, LinuxTerminalService); } + +DEFAULT_TERMINAL_LINUX_READY.then(defaultTerminalLinux => { + let configurationRegistry = Registry.as(Extensions.Configuration); + configurationRegistry.registerConfiguration({ + 'id': 'externalTerminal', + 'order': 100, + 'title': nls.localize('terminalConfigurationTitle', "External Terminal"), + 'type': 'object', + 'properties': { + 'terminal.external.windowsExec': { + 'type': 'string', + 'description': nls.localize('terminal.external.windowsExec', "Customizes which terminal to run on Windows."), + 'default': DEFAULT_TERMINAL_WINDOWS, + 'isExecutable': true + }, + 'terminal.external.osxExec': { + 'type': 'string', + 'description': nls.localize('terminal.external.osxExec', "Customizes which terminal application to run on OS X."), + 'default': DEFAULT_TERMINAL_OSX, + 'isExecutable': true + }, + 'terminal.external.linuxExec': { + 'type': 'string', + 'description': nls.localize('terminal.external.linuxExec', "Customizes which terminal to run on Linux."), + 'default': defaultTerminalLinux, + 'isExecutable': true + } + } + }); +}); + diff --git a/src/vs/workbench/parts/files/browser/fileActions.contribution.ts b/src/vs/workbench/parts/files/browser/fileActions.contribution.ts index a0dad3c1940b6828405bc18219965feaa1165f42..19e071a0cf4d97ca7570abd4b4def3b63a95188d 100644 --- a/src/vs/workbench/parts/files/browser/fileActions.contribution.ts +++ b/src/vs/workbench/parts/files/browser/fileActions.contribution.ts @@ -21,6 +21,7 @@ import { FileStat, Model } from 'vs/workbench/parts/files/common/explorerModel'; import { KeyMod, KeyChord, KeyCode } from 'vs/base/common/keyCodes'; import { OpenFolderAction, OpenFileFolderAction, AddRootFolderAction, RemoveRootFolderAction } from 'vs/workbench/browser/actions/fileActions'; import { copyFocusedFilesExplorerViewItem, revealInOSFocusedFilesExplorerItem, openFocusedExplorerItemSideBySideCommand, copyPathOfFocusedExplorerItem, copyPathCommand, revealInExplorerCommand, revealInOSCommand, openFolderPickerCommand, openWindowCommand, openFileInNewWindowCommand, deleteFocusedFilesExplorerViewItemCommand, moveFocusedFilesExplorerViewItemToTrashCommand, renameFocusedFilesExplorerViewItemCommand } from 'vs/workbench/parts/files/browser/fileCommands'; +import { ExplorerViewerActionContributor as TerminalExplorerViewerActionContributor } from 'vs/workbench/parts/execution/browser/terminal.contribution'; import { CommandsRegistry, ICommandHandler } from 'vs/platform/commands/common/commands'; import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; import { KeybindingsRegistry } from 'vs/platform/keybinding/common/keybindingsRegistry'; @@ -185,6 +186,7 @@ class ExplorerViewersActionContributor extends ActionBarContributor { const actionBarRegistry = Registry.as(ActionBarExtensions.Actionbar); actionBarRegistry.registerActionBarContributor(Scope.VIEWER, FilesViewerActionContributor); actionBarRegistry.registerActionBarContributor(Scope.VIEWER, ExplorerViewersActionContributor); +actionBarRegistry.registerActionBarContributor(Scope.VIEWER, TerminalExplorerViewerActionContributor); // Contribute Global Actions const category = nls.localize('filesCategory', "Files"); diff --git a/src/vs/workbench/parts/files/browser/files.contribution.ts b/src/vs/workbench/parts/files/browser/files.contribution.ts index 9f1388cfa358a41a27c7280d42d185067bc5d458..e273841a42003f6f6e56242ace0a35588d268e38 100644 --- a/src/vs/workbench/parts/files/browser/files.contribution.ts +++ b/src/vs/workbench/parts/files/browser/files.contribution.ts @@ -334,6 +334,16 @@ configurationRegistry.registerConfiguration({ nls.localize('sortOrder.modified', 'Files and directories are sorted by last modified date, in descending order. Directories are displayed before files.') ], 'description': nls.localize('sortOrder', "Controls the way of sorting files and directories in the explorer.") - } + }, + 'explorer.openInTerminalKind': { + 'type': 'string', + 'enum': [ + 'external', + 'integrated' + ], + 'description': nls.localize('explorer.openInTerminalKind', "Customizes what kind of terminal to launch."), + 'default': 'external', + 'isExecutable': false + }, } }); diff --git a/src/vs/workbench/parts/files/common/files.ts b/src/vs/workbench/parts/files/common/files.ts index 604d8bcab963216a11f13dbd8ad4351716a1b915..6e0ef76c50dbdeefa8096aebaa1e30869665377c 100644 --- a/src/vs/workbench/parts/files/common/files.ts +++ b/src/vs/workbench/parts/files/common/files.ts @@ -61,6 +61,7 @@ export interface IFilesConfiguration extends IFilesConfiguration, IWorkbenchEdit autoReveal: boolean; enableDragAndDrop: boolean; sortOrder: SortOrder; + openInTerminalKind: string; }; editor: IEditorOptions; } diff --git a/src/vs/workbench/workbench.main.ts b/src/vs/workbench/workbench.main.ts index 5dfb796f5424f47f8ea9765cf5abe7b4f385cf98..59e8a78b8ab12096b6a761c0843f9ffc83aabfb2 100644 --- a/src/vs/workbench/workbench.main.ts +++ b/src/vs/workbench/workbench.main.ts @@ -86,7 +86,6 @@ import 'vs/workbench/parts/emmet/electron-browser/emmet.contribution'; import 'vs/workbench/parts/codeEditor/codeEditor.contribution'; import 'vs/workbench/parts/execution/electron-browser/execution.contribution'; -import 'vs/workbench/parts/execution/electron-browser/terminal.contribution'; import 'vs/workbench/parts/snippets/electron-browser/snippets.contribution';