From f5004b783d822c1c41e4b9f95b044dc4d2827280 Mon Sep 17 00:00:00 2001 From: isidor Date: Mon, 12 Feb 2018 11:04:35 +0100 Subject: [PATCH] explorer: new file and folder command in command palette fixes #43363 --- .../fileActions.contribution.ts | 11 +++--- .../files/electron-browser/fileActions.ts | 39 +++++++++++++------ 2 files changed, 32 insertions(+), 18 deletions(-) diff --git a/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.ts b/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.ts index ec6ca05af8f..00a64e2658d 100644 --- a/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.ts +++ b/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.ts @@ -16,7 +16,7 @@ import { CommandsRegistry, ICommandHandler } from 'vs/platform/commands/common/c import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; import { KeybindingsRegistry } from 'vs/platform/keybinding/common/keybindingsRegistry'; import { isWindows, isMacintosh } from 'vs/base/common/platform'; -import { FilesExplorerFocusCondition, ExplorerRootContext, ExplorerFolderContext, ExplorerFocusedContext } from 'vs/workbench/parts/files/common/files'; +import { FilesExplorerFocusCondition, ExplorerRootContext, ExplorerFolderContext } from 'vs/workbench/parts/files/common/files'; import { ADD_ROOT_FOLDER_COMMAND_ID, ADD_ROOT_FOLDER_LABEL } from 'vs/workbench/browser/actions/workspaceCommands'; import { CLOSE_UNMODIFIED_EDITORS_COMMAND_ID, CLOSE_EDITORS_IN_GROUP_COMMAND_ID, CLOSE_EDITOR_COMMAND_ID, CLOSE_OTHER_EDITORS_IN_GROUP_COMMAND_ID } from 'vs/workbench/browser/parts/editor/editorCommands'; import { OPEN_FOLDER_SETTINGS_COMMAND, OPEN_FOLDER_SETTINGS_LABEL } from 'vs/workbench/parts/preferences/browser/preferencesActions'; @@ -142,14 +142,13 @@ function appendSaveConflictEditorTitleAction(id: string, title: string, iconPath // Menu registration - command palette -function appendToCommandPalette(id: string, title: string, category: string, when?: ContextKeyExpr): void { +function appendToCommandPalette(id: string, title: string, category: string): void { MenuRegistry.appendMenuItem(MenuId.CommandPalette, { command: { id, title, category - }, - when + } }); } appendToCommandPalette(COPY_PATH_COMMAND_ID, nls.localize('copyPathOfActive', "Copy Path of Active File"), category); @@ -161,8 +160,8 @@ appendToCommandPalette(COMPARE_WITH_SAVED_COMMAND_ID, nls.localize('compareActiv appendToCommandPalette(REVEAL_IN_OS_COMMAND_ID, REVEAL_IN_OS_LABEL, category); appendToCommandPalette(SAVE_FILE_AS_COMMAND_ID, SAVE_FILE_AS_LABEL, category); appendToCommandPalette(CLOSE_EDITOR_COMMAND_ID, nls.localize('closeEditor', "Close Editor"), nls.localize('view', "View")); -appendToCommandPalette(NEW_FILE_COMMAND_ID, NEW_FILE_LABEL, category, ExplorerFocusedContext); -appendToCommandPalette(NEW_FOLDER_COMMAND_ID, NEW_FOLDER_LABEL, category, ExplorerFocusedContext); +appendToCommandPalette(NEW_FILE_COMMAND_ID, NEW_FILE_LABEL, category); +appendToCommandPalette(NEW_FOLDER_COMMAND_ID, NEW_FOLDER_LABEL, category); diff --git a/src/vs/workbench/parts/files/electron-browser/fileActions.ts b/src/vs/workbench/parts/files/electron-browser/fileActions.ts index 788824e848b..a7ffb1d52ab 100644 --- a/src/vs/workbench/parts/files/electron-browser/fileActions.ts +++ b/src/vs/workbench/parts/files/electron-browser/fileActions.ts @@ -1525,27 +1525,42 @@ function getContext(listWidget: ListWidget, viewletService: IViewletService): IE // TODO@isidor these commands are calling into actions due to the complex inheritance action structure. // It should be the other way around, that actions call into commands. +function openExplorerAndRunAction(accessor: ServicesAccessor, isFolderAction: boolean): TPromise { + const instantationService = accessor.get(IInstantiationService); + const listService = accessor.get(IListService); + const viewletService = accessor.get(IViewletService); + const activeViewlet = viewletService.getActiveViewlet(); + let explorerPromise = TPromise.as(activeViewlet); + if (!activeViewlet || activeViewlet.getId() !== VIEWLET_ID) { + explorerPromise = viewletService.openViewlet(VIEWLET_ID, true); + } + + return explorerPromise.then((explorer: ExplorerViewlet) => { + const explorerView = explorer.getExplorerView(); + if (explorerView && explorerView.isVisible() && explorerView.isExpanded()) { + explorerView.focus(); + const explorerContext = getContext(listService.lastFocusedList, viewletService); + const constructor = isFolderAction ? NewFolderAction : NewFileAction; + const action = instantationService.createInstance(constructor, listService.lastFocusedList, explorerContext.stat); + + return action.run(explorerContext); + } + + return undefined; + }); +} + CommandsRegistry.registerCommand({ id: NEW_FILE_COMMAND_ID, handler: (accessor) => { - const instantationService = accessor.get(IInstantiationService); - const listService = accessor.get(IListService); - const explorerContext = getContext(listService.lastFocusedList, accessor.get(IViewletService)); - const newFileAction = instantationService.createInstance(NewFileAction, listService.lastFocusedList, explorerContext.stat); - - return newFileAction.run(explorerContext); + return openExplorerAndRunAction(accessor, false); } }); CommandsRegistry.registerCommand({ id: NEW_FOLDER_COMMAND_ID, handler: (accessor) => { - const instantationService = accessor.get(IInstantiationService); - const listService = accessor.get(IListService); - const explorerContext = getContext(listService.lastFocusedList, accessor.get(IViewletService)); - const newFolderAction = instantationService.createInstance(NewFolderAction, listService.lastFocusedList, explorerContext.stat); - - return newFolderAction.run(explorerContext); + return openExplorerAndRunAction(accessor, true); } }); -- GitLab