mirror of
https://github.com/esm7/obsidian-vimrc-support.git
synced 2026-07-22 05:00:25 +00:00
* feat: define and expose obsidian-specific vim commands jumpToNextHeading: g] jumpToPreviousHeading: g[ * Implement jumpToPreviousLink motion * Refactoring and implementing jumpToNextLink * refactor: new jumpToPattern function that can be used for motions * refactor: renamed file and removed unneeded exports * fix: return last found index even if fewer than n instances found, instead of undefined * feat: implement moveUpSkipFold and moveDownSkipFold * refactor: extract out helper functions for defining obsidian vim actions * refactor: split vimApi.ts into two files * refactor: add comment * refactor: update names, types, etc * feat: followLinkUnderCursor action * feat: jumpToLink now jumps to both markdown and wiki links * refactor: rename fns * refactor: add docstrings / change var names * feat: implement looping around * refactor: cleaner implementation of jumpToPattern * Change mappings for next/prev heading to [[ and ]] * Tiny fixes * docs: update docs now that some more motions are provided by default --------- Co-authored-by: Erez Shermer <erezshermer@gmail.com>
35 lines
1 KiB
TypeScript
35 lines
1 KiB
TypeScript
/**
|
|
* Utility types and functions for defining Obsidian-specific Vim commands.
|
|
*/
|
|
|
|
import { Editor as CodeMirrorEditor } from "codemirror";
|
|
|
|
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: CodeMirrorEditor,
|
|
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, {});
|
|
}
|