Spaces:
Sleeping
Sleeping
obsidian-qa-bot
/
docs
/obsidian-developer
/Plugins
/Editor
/Communicating with editor extensions.md
Once you've built your editor extension, you might want to communicate with it from outside the editor. For example, through a [[Commands|command]], or a [[Ribbon actions|ribbon action]]. | |
You can access the CodeMirror 6 editor from a [[MarkdownView|MarkdownView]]. However, since the Obsidian API doesn't actually expose the editor, you need to tell TypeScript to trust that it's there, using `@ts-expect-error`. | |
```ts | |
import { EditorView } from "@codemirror/view"; | |
// @ts-expect-error, not typed | |
const editorView = view.editor.cm as EditorView; | |
``` | |
## View plugin | |
You can access the [[View plugins|view plugin]] instance from the `EditorView.plugin()` method. | |
```ts | |
this.addCommand({ | |
id: "example-editor-command", | |
name: "Example editor command", | |
editorCallback: (editor, view) => { | |
// @ts-expect-error, not typed | |
const editorView = view.editor.cm as EditorView; | |
const plugin = editorView.plugin(examplePlugin); | |
if (plugin) { | |
plugin.addPointerToSelection(editorView); | |
} | |
}, | |
}); | |
``` | |
## State field | |
You can dispatch changes and [[State fields#Dispatching state effects|dispatch state effects]] directly on the editor view. | |
```ts | |
this.addCommand({ | |
id: "example-editor-command", | |
name: "Example editor command", | |
editorCallback: (editor, view) => { | |
// @ts-expect-error, not typed | |
const editorView = view.editor.cm as EditorView; | |
editorView.dispatch({ | |
effects: [ | |
// ... | |
], | |
}); | |
}, | |
}); | |
``` | |