Fixed
- Note Composer "Extract current selection" does nothing in V-LINE mode — in visual-line mode, the codemirror-vim fork sets a cursor-only CM6 selection (to prevent Live Preview from uncollapsing hidden markup). This caused
editor.somethingSelected()to returnfalse, so commands that check for a selection silently failed. The existingexecuteCommandwrapper expanded the selection before command execution, but Obsidian's command palette invokescheckCallback()directly on the command object, bypassingexecuteCommandentirely. Fixed by wrapping every command'scheckCallbackto expand the visual-line selection before the callback runs, and wrappingaddCommandto cover commands registered after plugin load. (#137)- Plugin:
src/vim/visual-line-command-fix.ts(wrapcheckCallbackon all commands +addCommandhook; extract sharedwithExpandedSelectionhelper)
- Plugin:
- Cursor flashing at previous cell during table navigation — when table navigation was enabled, the vim cursor layer remained visible at the previous cell position after entering the table and after navigating between cells with
h/j/k/l. Three root causes: (1)tryEnter()never dispatched theenterTableNavstate effect, soisTableNavActive()always returnedfalse— themainEditorTableCursorGuardcontinued running during table-nav and could clear cursor suppression. (2) The vim cursor layer (.cm-vimCursorLayer) on the main editor was not proactively cleared during navigation, allowing stale cursor elements to remain visible. (3)cellEditorCursorGuard.destroy()unconditionally calledclearCursorSuppressedForView()on the parent editor, undoing the controller's suppression even while table-nav was active. Additionally, cell editors inside the table widget are destroyed and recreated during entry, each creating a freshBlockCursorPluginwith a visible cursor layer — the controller now suppresses these on every ViewUpdate viasuppressWidgetCursorLayers(). (#135)- Plugin:
src/vim/table-nav-controller.ts(dispatchenterTableNaveffect,clearVimCursorLayer()helper,suppressWidgetCursorLayers()on every update + entry + rAF safety net) - Plugin:
src/vim/table-cell-cursor-guard.ts(cellEditorCursorGuard.destroy()guards onisTableNavActive())
- Plugin:
Tests
- 3 regression tests in
test/specs/visual-line-command.e2e.ts(#137):note-composer:split-filecheckCallbackreturnstruein V-LINE,editor.somethingSelected()returnstruein V-LINE,executeCommandByIdaffects all selected lines in V-LINE - 3 regression tests in
test/specs/table-cursor-suppression.e2e.ts(#135): main editor cursor suppression during navigation, rapid multi-directional navigation, no visible cursor anywhere on initial entry - 7 regression tests in
test/specs/table-nav-disabled.e2e.ts(#136): cursor movement through tables withenableTableNav=false— 3 raw mode tests (j down, k up, j exits table) + 3 native mode traversal tests (j through, j cross-cell, k through) + 1 rapid-fire stability test (10 j's at 100ms intervals through 6-row table)
Documentation
CHANGELOG.mdKNOWN_LIMITATIONS.md: updated visual-line command passthrough description to reflectcheckCallbackwrapping for command palette path (#137); updated table navigation cursor hiding entry; added #136 cross-reference to #132 cursor disappearing fixCONTRIBUTING.md: updatedtable-nav-controller.tsandtable-cell-cursor-guard.tsdescriptions
Full Changelog: 0.116.0...0.117.0