From 71e424f8a7740affa36b836bf58eb50cc0b2f481 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Fri, 1 Apr 2016 16:08:59 +0200 Subject: [PATCH] Provide an action to reveal the currently active file in the explorer (fixes #4858) --- .../files/browser/fileActions.contribution.ts | 5 ++- .../parts/files/browser/fileActions.ts | 41 +++++++++++++++++++ 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/src/vs/workbench/parts/files/browser/fileActions.contribution.ts b/src/vs/workbench/parts/files/browser/fileActions.contribution.ts index 464e23bee95..1643e81a21d 100644 --- a/src/vs/workbench/parts/files/browser/fileActions.contribution.ts +++ b/src/vs/workbench/parts/files/browser/fileActions.contribution.ts @@ -10,7 +10,7 @@ import {Action, IAction} from 'vs/base/common/actions'; import {ActionItem, BaseActionItem, Separator} from 'vs/base/browser/ui/actionbar/actionbar'; import {Scope, IActionBarRegistry, Extensions as ActionBarExtensions, ActionBarContributor} from 'vs/workbench/browser/actionBarRegistry'; import {IEditorInputActionContext, IEditorInputAction, EditorInputActionContributor} from 'vs/workbench/browser/parts/editor/baseEditor'; -import {AddToWorkingFiles, FocusWorkingFiles, FocusFilesExplorer, OpenPreviousWorkingFile, OpenNextWorkingFile, CloseAllFilesAction, CloseFileAction, CloseOtherFilesAction, GlobalCompareResourcesAction, GlobalNewFolderAction, RevertFileAction, SaveFilesAction, SaveAllAction, SaveFileAction, keybindingForAction, MoveFileToTrashAction, TriggerRenameFileAction, PasteFileAction, CopyFileAction, SelectResourceForCompareAction, CompareResourcesAction, NewFolderAction, NewFileAction, OpenToSideAction} from 'vs/workbench/parts/files/browser/fileActions'; +import {AddToWorkingFiles, FocusWorkingFiles, FocusFilesExplorer, OpenPreviousWorkingFile, OpenNextWorkingFile, CloseAllFilesAction, CloseFileAction, CloseOtherFilesAction, GlobalCompareResourcesAction, GlobalNewFolderAction, RevertFileAction, SaveFilesAction, SaveAllAction, SaveFileAction, keybindingForAction, MoveFileToTrashAction, TriggerRenameFileAction, PasteFileAction, CopyFileAction, SelectResourceForCompareAction, CompareResourcesAction, NewFolderAction, NewFileAction, OpenToSideAction, ShowActiveFileInExplorer} from 'vs/workbench/parts/files/browser/fileActions'; import {RevertLocalChangesAction, AcceptLocalChangesAction, ConflictResolutionDiffEditorInput} from 'vs/workbench/parts/files/browser/saveErrorHandler'; import {SyncActionDescriptor} from 'vs/platform/actions/common/actions'; import {IWorkbenchActionRegistry, Extensions as ActionExtensions} from 'vs/workbench/common/actionRegistry'; @@ -175,4 +175,5 @@ registry.registerWorkbenchAction(new SyncActionDescriptor(OpenNextWorkingFile, O registry.registerWorkbenchAction(new SyncActionDescriptor(OpenPreviousWorkingFile, OpenPreviousWorkingFile.ID, OpenPreviousWorkingFile.LABEL, { primary: KeyMod.chord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyCode.UpArrow) }), category); registry.registerWorkbenchAction(new SyncActionDescriptor(AddToWorkingFiles, AddToWorkingFiles.ID, AddToWorkingFiles.LABEL, { primary: KeyMod.chord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyCode.Enter) }), category); registry.registerWorkbenchAction(new SyncActionDescriptor(FocusWorkingFiles, FocusWorkingFiles.ID, FocusWorkingFiles.LABEL, { primary: KeyMod.chord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyCode.KEY_E) }), category); -registry.registerWorkbenchAction(new SyncActionDescriptor(FocusFilesExplorer, FocusFilesExplorer.ID, FocusFilesExplorer.LABEL), category); \ No newline at end of file +registry.registerWorkbenchAction(new SyncActionDescriptor(FocusFilesExplorer, FocusFilesExplorer.ID, FocusFilesExplorer.LABEL), category); +registry.registerWorkbenchAction(new SyncActionDescriptor(ShowActiveFileInExplorer, ShowActiveFileInExplorer.ID, ShowActiveFileInExplorer.LABEL), category); \ No newline at end of file diff --git a/src/vs/workbench/parts/files/browser/fileActions.ts b/src/vs/workbench/parts/files/browser/fileActions.ts index c2061ff94f4..3f05953ccf4 100644 --- a/src/vs/workbench/parts/files/browser/fileActions.ts +++ b/src/vs/workbench/parts/files/browser/fileActions.ts @@ -17,6 +17,7 @@ import errors = require('vs/base/common/errors'); import strings = require('vs/base/common/strings'); import {Event, EventType as CommonEventType} from 'vs/base/common/events'; import {getPathLabel} from 'vs/base/common/labels'; +import severity from 'vs/base/common/severity'; import diagnostics = require('vs/base/common/diagnostics'); import {Action, IAction} from 'vs/base/common/actions'; import {MessageType, IInputValidator} from 'vs/base/browser/ui/inputbox/inputBox'; @@ -2316,6 +2317,46 @@ export class FocusFilesExplorer extends Action { } } +export class ShowActiveFileInExplorer extends Action { + + public static ID = 'workbench.files.action.showActiveFileInExplorer'; + public static LABEL = nls.localize('showInExplorer', "Show Active File in Explorer"); + + constructor( + id: string, + label: string, + @IWorkbenchEditorService private editorService: IWorkbenchEditorService, + @IViewletService private viewletService: IViewletService, + @IWorkspaceContextService private contextService: IWorkspaceContextService, + @IMessageService private messageService: IMessageService + ) { + super(id, label); + } + + public run(): TPromise { + let fileInput = asFileEditorInput(this.editorService.getActiveEditorInput(), true); + if (fileInput) { + return this.viewletService.openViewlet(Files.VIEWLET_ID, false).then((viewlet: ExplorerViewlet) => { + const isInsideWorkspace = this.contextService.isInsideWorkspace(fileInput.getResource()); + if (isInsideWorkspace) { + const explorerView = viewlet.getExplorerView(); + if (explorerView) { + explorerView.expand(); + explorerView.select(fileInput.getResource(), true); + } + } else { + const workingFilesView = viewlet.getWorkingFilesView(); + workingFilesView.expand(); + } + }); + } else { + this.messageService.show(severity.Info, nls.localize('openFileToShow', "Open a file first to show it in the explorer")); + } + + return TPromise.as(true); + } +} + export function keybindingForAction(id: string): Keybinding { switch (id) { case GlobalNewFileAction.ID: