Path: blob/main/src/vs/workbench/contrib/files/electron-browser/fileActions.contribution.ts
3296 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import * as nls from '../../../../nls.js';6import { URI } from '../../../../base/common/uri.js';7import { IWorkspaceContextService } from '../../../../platform/workspace/common/workspace.js';8import { isWindows, isMacintosh } from '../../../../base/common/platform.js';9import { Schemas } from '../../../../base/common/network.js';10import { INativeHostService } from '../../../../platform/native/common/native.js';11import { KeybindingsRegistry, KeybindingWeight } from '../../../../platform/keybinding/common/keybindingsRegistry.js';12import { EditorContextKeys } from '../../../../editor/common/editorContextKeys.js';13import { KeyMod, KeyCode, KeyChord } from '../../../../base/common/keyCodes.js';14import { ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js';15import { getMultiSelectedResources, IExplorerService } from '../browser/files.js';16import { IEditorService } from '../../../services/editor/common/editorService.js';17import { revealResourcesInOS } from './fileCommands.js';18import { MenuRegistry, MenuId } from '../../../../platform/actions/common/actions.js';19import { ResourceContextKey } from '../../../common/contextkeys.js';20import { appendToCommandPalette, appendEditorTitleContextMenuItem } from '../browser/fileActions.contribution.js';21import { SideBySideEditor, EditorResourceAccessor } from '../../../common/editor.js';22import { ContextKeyExpr } from '../../../../platform/contextkey/common/contextkey.js';23import { IListService } from '../../../../platform/list/browser/listService.js';24import { IEditorGroupsService } from '../../../services/editor/common/editorGroupsService.js';2526const REVEAL_IN_OS_COMMAND_ID = 'revealFileInOS';27const REVEAL_IN_OS_LABEL = isWindows ? nls.localize2('revealInWindows', "Reveal in File Explorer") : isMacintosh ? nls.localize2('revealInMac', "Reveal in Finder") : nls.localize2('openContainer', "Open Containing Folder");28const REVEAL_IN_OS_WHEN_CONTEXT = ContextKeyExpr.or(ResourceContextKey.Scheme.isEqualTo(Schemas.file), ResourceContextKey.Scheme.isEqualTo(Schemas.vscodeUserData));2930KeybindingsRegistry.registerCommandAndKeybindingRule({31id: REVEAL_IN_OS_COMMAND_ID,32weight: KeybindingWeight.WorkbenchContrib,33when: EditorContextKeys.focus.toNegated(),34primary: KeyMod.CtrlCmd | KeyMod.Alt | KeyCode.KeyR,35win: {36primary: KeyMod.Shift | KeyMod.Alt | KeyCode.KeyR37},38handler: (accessor: ServicesAccessor, resource: URI | object) => {39const resources = getMultiSelectedResources(resource, accessor.get(IListService), accessor.get(IEditorService), accessor.get(IEditorGroupsService), accessor.get(IExplorerService));40revealResourcesInOS(resources, accessor.get(INativeHostService), accessor.get(IWorkspaceContextService));41}42});4344const REVEAL_ACTIVE_FILE_IN_OS_COMMAND_ID = 'workbench.action.files.revealActiveFileInWindows';4546KeybindingsRegistry.registerCommandAndKeybindingRule({47weight: KeybindingWeight.WorkbenchContrib,48when: undefined,49primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyCode.KeyR),50id: REVEAL_ACTIVE_FILE_IN_OS_COMMAND_ID,51handler: (accessor: ServicesAccessor) => {52const editorService = accessor.get(IEditorService);53const activeInput = editorService.activeEditor;54const resource = EditorResourceAccessor.getOriginalUri(activeInput, { filterByScheme: Schemas.file, supportSideBySide: SideBySideEditor.PRIMARY });55const resources = resource ? [resource] : [];56revealResourcesInOS(resources, accessor.get(INativeHostService), accessor.get(IWorkspaceContextService));57}58});5960appendEditorTitleContextMenuItem(REVEAL_IN_OS_COMMAND_ID, REVEAL_IN_OS_LABEL.value, REVEAL_IN_OS_WHEN_CONTEXT, '2_files', false, 0);6162// Menu registration - open editors6364const revealInOsCommand = {65id: REVEAL_IN_OS_COMMAND_ID,66title: REVEAL_IN_OS_LABEL.value67};68MenuRegistry.appendMenuItem(MenuId.OpenEditorsContext, {69group: 'navigation',70order: 20,71command: revealInOsCommand,72when: REVEAL_IN_OS_WHEN_CONTEXT73});74MenuRegistry.appendMenuItem(MenuId.OpenEditorsContextShare, {75title: nls.localize('miShare', "Share"),76submenu: MenuId.MenubarShare,77group: 'share',78order: 3,79});8081// Menu registration - explorer8283MenuRegistry.appendMenuItem(MenuId.ExplorerContext, {84group: 'navigation',85order: 20,86command: revealInOsCommand,87when: REVEAL_IN_OS_WHEN_CONTEXT88});8990// Command Palette9192const category = nls.localize2('filesCategory', "File");93appendToCommandPalette({94id: REVEAL_IN_OS_COMMAND_ID,95title: REVEAL_IN_OS_LABEL,96category: category97}, REVEAL_IN_OS_WHEN_CONTEXT);9899// Menu registration - chat attachments context100101MenuRegistry.appendMenuItem(MenuId.ChatAttachmentsContext, {102group: 'navigation',103order: 20,104command: revealInOsCommand,105when: REVEAL_IN_OS_WHEN_CONTEXT106});107108// Menu registration - chat inline anchor109110MenuRegistry.appendMenuItem(MenuId.ChatInlineResourceAnchorContext, {111group: 'navigation',112order: 20,113command: revealInOsCommand,114when: REVEAL_IN_OS_WHEN_CONTEXT115});116117118