mirror of
https://github.com/esm7/obsidian-vimrc-support.git
synced 2026-07-22 05:00:25 +00:00
- CodeMirror.Editor is globally available as a type (and already used in other files), so lets just stick consistently to using that
34 lines
971 B
TypeScript
34 lines
971 B
TypeScript
/**
|
|
* Utility types and functions for defining Obsidian-specific Vim commands.
|
|
*/
|
|
|
|
|
|
import VimrcPlugin from "../main";
|
|
import { MotionFn, VimApi } from "./vimApi";
|
|
|
|
export type ObsidianActionFn = (
|
|
vimrcPlugin: VimrcPlugin, // Included so we can run Obsidian commands as part of the action
|
|
cm: CodeMirror.Editor,
|
|
actionArgs: { repeat: number },
|
|
) => void;
|
|
|
|
export function defineAndMapObsidianVimMotion(
|
|
vimObject: VimApi,
|
|
motionFn: MotionFn,
|
|
mapping: string
|
|
) {
|
|
vimObject.defineMotion(motionFn.name, motionFn);
|
|
vimObject.mapCommand(mapping, "motion", motionFn.name, undefined, {});
|
|
}
|
|
|
|
export function defineAndMapObsidianVimAction(
|
|
vimObject: VimApi,
|
|
vimrcPlugin: VimrcPlugin,
|
|
obsidianActionFn: ObsidianActionFn,
|
|
mapping: string
|
|
) {
|
|
vimObject.defineAction(obsidianActionFn.name, (cm, actionArgs) => {
|
|
obsidianActionFn(vimrcPlugin, cm, actionArgs);
|
|
});
|
|
vimObject.mapCommand(mapping, "action", obsidianActionFn.name, undefined, {});
|
|
}
|