diff --git a/src/vs/workbench/api/browser/mainThreadEditors.ts b/src/vs/workbench/api/browser/mainThreadEditors.ts index a1f130d4c37..f7b2c2f1327 100644 --- a/src/vs/workbench/api/browser/mainThreadEditors.ts +++ b/src/vs/workbench/api/browser/mainThreadEditors.ts @@ -24,6 +24,7 @@ import { ExtHostContext, ExtHostEditorsShape, IApplyEditsOptions, IExtHostContex import { EditorViewColumn, editorGroupToViewColumn, viewColumnToEditorGroup } from 'vs/workbench/api/common/shared/editor'; import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService'; +import { DEFAULT_EDITOR_ID } from 'vs/workbench/contrib/files/common/files'; export class MainThreadTextEditors implements MainThreadTextEditorsShape { @@ -293,6 +294,30 @@ CommandsRegistry.registerCommand('_workbench.open', function (accessor: Services return openerService.open(resource).then(_ => undefined); }); +CommandsRegistry.registerCommand('_workbench.openWith', (accessor: ServicesAccessor, args: [URI, string, ITextEditorOptions | undefined, EditorViewColumn | undefined]) => { + const editorService = accessor.get(IEditorService); + const editorGroupService = accessor.get(IEditorGroupsService); + + const [resource, id, options, position] = args; + + const group = editorGroupService.getGroup(viewColumnToEditorGroup(editorGroupService, position)) ?? editorGroupService.activeGroup; + const textOptions = options ? { ...options, ignoreOverrides: true } : { ignoreOverrides: true }; + + const fileEditorInput = editorService.createEditorInput({ resource, forceFile: true }); + if (id === DEFAULT_EDITOR_ID) { + return editorService.openEditor(fileEditorInput, textOptions, position); + } + + const editors = editorService.getEditorOverrides(fileEditorInput, undefined, group); + for (const [handler, data] of editors) { + if (data.id === id) { + return handler.open(fileEditorInput, options, group, id); + } + } + + return undefined; +}); + CommandsRegistry.registerCommand('_workbench.diff', function (accessor: ServicesAccessor, args: [URI, URI, string, string, IEditorOptions, EditorViewColumn]) { const editorService = accessor.get(IEditorService); diff --git a/src/vs/workbench/contrib/customEditor/browser/commands.ts b/src/vs/workbench/contrib/customEditor/browser/commands.ts index f0556cec665..b6189996d75 100644 --- a/src/vs/workbench/contrib/customEditor/browser/commands.ts +++ b/src/vs/workbench/contrib/customEditor/browser/commands.ts @@ -4,33 +4,16 @@ *--------------------------------------------------------------------------------------------*/ import { KeyCode, KeyMod } from 'vs/base/common/keyCodes'; -import { URI } from 'vs/base/common/uri'; import { Command } from 'vs/editor/browser/editorExtensions'; -import { CommandsRegistry } from 'vs/platform/commands/common/commands'; import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; import { InputFocusedContextKey } from 'vs/platform/contextkey/common/contextkeys'; -import type { ITextEditorOptions } from 'vs/platform/editor/common/editor'; import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; -import { EditorViewColumn, viewColumnToEditorGroup } from 'vs/workbench/api/common/shared/editor'; import { CustomEditorInput } from 'vs/workbench/contrib/customEditor/browser/customEditorInput'; import { defaultCustomEditor } from 'vs/workbench/contrib/customEditor/common/contributedCustomEditors'; import { CONTEXT_CUSTOM_EDITORS, CONTEXT_FOCUSED_CUSTOM_EDITOR_IS_EDITABLE, ICustomEditorService } from 'vs/workbench/contrib/customEditor/common/customEditor'; -import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService'; import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; -// #region Open With - -CommandsRegistry.registerCommand('_workbench.openWith', (accessor: ServicesAccessor, args: [URI, string, ITextEditorOptions | undefined, EditorViewColumn | undefined]) => { - const customEditorService = accessor.get(ICustomEditorService); - const editorGroupService = accessor.get(IEditorGroupsService); - - const [resource, viewType, options, position] = args; - const group = viewColumnToEditorGroup(editorGroupService, position); - customEditorService.openWith(resource, viewType, options, editorGroupService.getGroup(group)); -}); - -// #endregion (new class UndoCustomEditorCommand extends Command { public static readonly ID = 'editor.action.customEditor.undo'; diff --git a/src/vs/workbench/contrib/customEditor/common/contributedCustomEditors.ts b/src/vs/workbench/contrib/customEditor/common/contributedCustomEditors.ts index c52cdbe1d58..b00fa6c5f63 100644 --- a/src/vs/workbench/contrib/customEditor/common/contributedCustomEditors.ts +++ b/src/vs/workbench/contrib/customEditor/common/contributedCustomEditors.ts @@ -9,12 +9,13 @@ import { URI } from 'vs/base/common/uri'; import * as nls from 'vs/nls'; import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; import { CustomEditorInfo, CustomEditorPriority } from 'vs/workbench/contrib/customEditor/common/customEditor'; -import { ICustomEditorsExtensionPoint, customEditorsExtensionPoint } from 'vs/workbench/contrib/customEditor/common/extensionPoint'; +import { customEditorsExtensionPoint, ICustomEditorsExtensionPoint } from 'vs/workbench/contrib/customEditor/common/extensionPoint'; +import { DEFAULT_EDITOR_ID } from 'vs/workbench/contrib/files/common/files'; const builtinProviderDisplayName = nls.localize('builtinProviderDisplayName', "Built-in"); export const defaultCustomEditor = new CustomEditorInfo({ - id: 'default', + id: DEFAULT_EDITOR_ID, displayName: nls.localize('promptOpenWith.defaultEditor.displayName', "Text Editor"), providerDisplayName: builtinProviderDisplayName, selector: [ diff --git a/src/vs/workbench/contrib/files/browser/fileActions.ts b/src/vs/workbench/contrib/files/browser/fileActions.ts index 5abaabf1d62..eec4e5c1e86 100644 --- a/src/vs/workbench/contrib/files/browser/fileActions.ts +++ b/src/vs/workbench/contrib/files/browser/fileActions.ts @@ -13,7 +13,7 @@ import { toErrorMessage } from 'vs/base/common/errorMessage'; import * as strings from 'vs/base/common/strings'; import { Action } from 'vs/base/common/actions'; import { dispose, IDisposable } from 'vs/base/common/lifecycle'; -import { VIEWLET_ID, IExplorerService, IFilesConfiguration } from 'vs/workbench/contrib/files/common/files'; +import { VIEWLET_ID, IExplorerService, IFilesConfiguration, DEFAULT_EDITOR_ID } from 'vs/workbench/contrib/files/common/files'; import { ITextFileService } from 'vs/workbench/services/textfile/common/textfiles'; import { IFileService } from 'vs/platform/files/common/files'; import { toResource, SideBySideEditor, IEditorInput } from 'vs/workbench/common/editor'; @@ -576,9 +576,9 @@ export class ReopenResourcesAction extends Action { return; } - if (!items.find(item => item.id === 'default')) { + if (!items.find(item => item.id === DEFAULT_EDITOR_ID)) { items.unshift({ - id: 'default', + id: DEFAULT_EDITOR_ID, label: nls.localize('promptOpenWith.defaultEditor.displayName', "Text Editor"), description: activeInput instanceof FileEditorInput ? 'Currently Active' : undefined, detail: builtinProviderDisplayName, @@ -633,7 +633,7 @@ export class ReopenResourcesAction extends Action { return; } - if (pickedItem.id === 'default') { + if (pickedItem.id === DEFAULT_EDITOR_ID) { const fileEditorInput = this.editorService.createEditorInput({ resource: activeResource!, forceFile: true }); const textOptions = options ? { ...options, ignoreOverrides: true } : { ignoreOverrides: true }; diff --git a/src/vs/workbench/contrib/files/common/files.ts b/src/vs/workbench/contrib/files/common/files.ts index 963194be6e2..8af67e37238 100644 --- a/src/vs/workbench/contrib/files/common/files.ts +++ b/src/vs/workbench/contrib/files/common/files.ts @@ -29,6 +29,11 @@ import { IEditorService } from 'vs/workbench/services/editor/common/editorServic */ export const VIEWLET_ID = 'workbench.view.explorer'; +/** + * Id of the default editor for open with. + */ +export const DEFAULT_EDITOR_ID = 'default'; + export interface IExplorerService { _serviceBrand: undefined; readonly roots: ExplorerItem[];