UNPKG

monaco-editor

Version:
115 lines (112 loc) 4.75 kB
import { HierarchicalKind } from '../../../../base/common/hierarchicalKind.js'; import { localize, localize2 } from '../../../../nls.js'; import { registerEditorContribution, registerEditorCommand, EditorCommand, registerEditorAction, EditorAction } from '../../../browser/editorExtensions.js'; import { EditorContextKeys } from '../../../common/editorContextKeys.js'; import { registerEditorFeature } from '../../../common/editorFeatures.js'; import { CopyPasteController, pasteWidgetVisibleCtx, changePasteTypeCommandId } from './copyPasteController.js'; import { DefaultTextPasteOrDropEditProvider, DefaultPasteProvidersFeature } from './defaultProviders.js'; /*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ const pasteAsCommandId = 'editor.action.pasteAs'; registerEditorContribution(CopyPasteController.ID, CopyPasteController, 0 /* EditorContributionInstantiation.Eager */); // eager because it listens to events on the container dom node of the editor registerEditorFeature(DefaultPasteProvidersFeature); registerEditorCommand(new class extends EditorCommand { constructor() { super({ id: changePasteTypeCommandId, precondition: pasteWidgetVisibleCtx, kbOpts: { weight: 100 /* KeybindingWeight.EditorContrib */, primary: 2048 /* KeyMod.CtrlCmd */ | 89 /* KeyCode.Period */, } }); } runEditorCommand(_accessor, editor) { return CopyPasteController.get(editor)?.changePasteType(); } }); registerEditorCommand(new class extends EditorCommand { constructor() { super({ id: 'editor.hidePasteWidget', precondition: pasteWidgetVisibleCtx, kbOpts: { weight: 100 /* KeybindingWeight.EditorContrib */, primary: 9 /* KeyCode.Escape */, } }); } runEditorCommand(_accessor, editor) { CopyPasteController.get(editor)?.clearWidgets(); } }); registerEditorAction(class PasteAsAction extends EditorAction { static { this.argsSchema = { oneOf: [ { type: 'object', required: ['kind'], properties: { kind: { type: 'string', description: localize(913, "The kind of the paste edit to try pasting with.\nIf there are multiple edits for this kind, the editor will show a picker. If there are no edits of this kind, the editor will show an error message."), } }, }, { type: 'object', required: ['preferences'], properties: { preferences: { type: 'array', description: localize(914, "List of preferred paste edit kind to try applying.\nThe first edit matching the preferences will be applied."), items: { type: 'string' } } }, } ] }; } constructor() { super({ id: pasteAsCommandId, label: localize2(915, "Paste As..."), precondition: EditorContextKeys.writable, metadata: { description: 'Paste as', args: [{ name: 'args', schema: PasteAsAction.argsSchema }] }, canTriggerInlineEdits: true, }); } run(_accessor, editor, args) { let preference; if (args) { if ('kind' in args) { preference = { only: new HierarchicalKind(args.kind) }; } else if ('preferences' in args) { preference = { preferences: args.preferences.map(kind => new HierarchicalKind(kind)) }; } } return CopyPasteController.get(editor)?.pasteAs(preference); } }); registerEditorAction(class extends EditorAction { constructor() { super({ id: 'editor.action.pasteAsText', label: localize2(916, "Paste as Text"), precondition: EditorContextKeys.writable, canTriggerInlineEdits: true, }); } run(_accessor, editor) { return CopyPasteController.get(editor)?.pasteAs({ providerId: DefaultTextPasteOrDropEditProvider.id }); } }); export { pasteAsCommandId };