Fixed
- Animated cursor does not animate for count-prefixed and multi-key motions — movements like
4j(count-prefixed) andg$(multi-key) caused the cursor to teleport instead of animating. TheresolveVimMode()method in the animated cursor controller usedvim.status(the chord display string) to detect operator-pending mode. Sincevim.statusis set on every keystroke (e.g.,"4"when typing a count digit,"g"when typing a prefix key), any multi-keystroke motion triggered a false mode change to operator-pending — which has a different cursor shape (underline vs block). Each shape change calledsnap(), bypassing the animation entirely. Fixed by removingvim.statusfrom the operator-pending detection — onlyinputState.operator(set when an actual operator liked/c/yis registered) now gates the operator-pending mode. (#86)- Plugin:
src/vim/animated-cursor/controller.ts(resolveVimMode— removedvim.statuscheck)
- Plugin:
- Hint mode does not navigate wikilinks or markdown links in Live Preview — typing the hint label for a wikilink (
[[Target]]) or markdown link ([text](Target)) in the editor did nothing. The.cm-underlinespans rendered by Live Preview are<span>elements withouthrefordata-hrefattributes —classifyTargetcorrectly identified them as links but extractedhref: undefined, causinghintActivateto fall through to the generic click handler (which does nothing useful on CM6 spans). Fixed by addingresolveCmUnderlineHref()which uses the CM6EditorView.posAtDOM()API to convert the DOM element to a document offset, then calls the existingfindLinkAtCursor()regex fromgoto-definition.tsto extract the link target from the raw markdown text. Works for wikilinks (including aliased and heading links), markdown links (internal and external), and bare URLs. Reading view and frontmatter property links were unaffected (they use<a>elements with properhref/data-hrefattributes). (#85)- Plugin:
src/ui/hint-mode.ts(getEditorViewFromElement,resolveCmUnderlineHref, updatedclassifyTargetlink branch)
- Plugin:
- Input method not restored after manual IME switch during insert mode — when a user manually switched input methods while in insert mode (e.g., from Vietnamese to English via OS keyboard shortcut), pressing
Escthenireset the IME to the original input method instead of preserving the manually chosen one. Thesave()method inImSwitchercached the stalelastKnownImvalue (set by the plugin's lastset()call) before querying the OS for the actual current IME. The async OS query updatedlastKnownImbut never wrote back tosavedImByLeaf, sorestore()always read the stale value. Fixed by makingsave()async — it now queries the OS for the real IME state first, then caches the result in bothlastKnownImandsavedImByLeaf.onInsertLeave()awaits the save before switching to the normal-mode default IME. Falls back tolastKnownImwhen the OS query fails (e.g., binary timeout). (#83)- Plugin:
src/im/im-switcher.ts(save()async with OS query,onInsertLeave()awaits save,debouncedSwitch/pendingSwitchaccept async callbacks),src/lua/api.ts(imSavetype updated),src/lua/loader.ts(fire-and-forget async save),src/lua/obsidian-api.ts(void floating promise)
- Plugin:
Tests
- 10 e2e tests in
test/specs/hint-mode-links.e2e.ts: wikilink/markdown-link/bare-URL href resolution from.cm-underlinespans, wikilink navigation (plain and aliased), markdown link navigation, inline wikilink navigation, reading view regression, frontmatter property link regression, external link safety - Updated 10 unit tests in
test/unit/im-switcher.test.ts:save()tests now verify OS query behavior (mockexecuteImGetreturn value instead of manually settinglastKnownIm), async settle viavi.advanceTimersByTimeAsync(0), new test for fallback when OS query returns null
Documentation
CHANGELOG.mdKNOWN_LIMITATIONS.md: Added animated cursor multi-key motion fix; added hint mode link navigation fix to hint mode actions sectionCONTRIBUTING.md: Updatedhint-mode.tsdescription with link resolution viaposAtDOMdocs/features/hint-mode.md: Updated internal link handling section with Live Preview resolution detailsKNOWN_LIMITATIONS.md: Updated input method switching section with manual IME switch fixCONTRIBUTING.md: Updatedim-switcher.tsdescriptionAGENTS.md: No changes needed (existing description already covers per-view IM switching)
Full Changelog: 0.81.0...0.82.0