Fixed
- Parent editor cursor visible next to table during cell editing — when entering cell edit mode from table-nav (via
i,a,c,s, orEnter), the parent editor's vim cursor layer became visible next to the table widget with an oversized height (spanning the full table widget). Root cause:enterCellEdit()calledclearCursorSuppressedForView()andresumeAnimatedCursorForView()immediately, but cell editor focus was deferred by 150ms viasetTimeoutinfinishCellEditEntry(). During the gap, the parent editor still had focus and itsBlockCursorPluginre-rendered the unsuppressed cursor at the table-range position wherecoordsAtPos()returns the full widget height. Additionally, even after focus transfer, a pendingrequestMeasurecallback from a prior update cycle could redraw the cursor withsuppressed=false. Fixed by removing both calls entirely — parent cursor suppression stays active throughout the nav→edit transition.exitCellEditToNav()andexitTable()handle restoring suppression state on exit. (#136)- Plugin:
src/vim/table-nav-controller.ts(removedclearCursorSuppressedForView+resumeAnimatedCursorForViewfromenterCellEdit)
- Plugin:
- Visual/Visual Line put command not replacing selection —
P,gp, andgPin visual or visual-line mode inserted text at the cursor instead of replacing the selected text. Two root causes: (1) the plugin'spasteFromRegister()(used byP/gp/gP) had no visual mode handling — it always performed a cursor-relative insert; (2) the fork'scontinuePaste()(used byp) read the CM6 selection viagetSelectedAreaRange()andcm.getSelection(), which return a collapsed range in visual-line mode due to the cursor-only CM6 selection design (see "Visual-line cursor-only CM6 selection" in KNOWN_LIMITATIONS.md). (#139)- Plugin:
src/workspace/navigation.ts(newpasteInVisualMode()function; visual mode detection inpasteFromRegister()delegates to it; readsvim.selfor correct range, handles visual-char and visual-line, stores replaced text in unnamed register, callsVim.exitVisualMode()) - Plugin:
src/types/vim-api.d.ts(addedexitVisualModetoVimApiinterface) - Fork:
~/Repos/codemirror-vim/src/vim.js(continuePastevisual-line branch now derivesselectionStart/selectionEndfromvim.selinstead of collapsed CM6 selection;selectedTextusescm.getRange()instead ofcm.getSelection(); linewise text preparation preserves trailing newline in visual-line mode since the replacement range spans whole lines, with last-line edge case handling) - Fork:
~/Repos/codemirror-vim/DIFFERENCES.md(new "Visual-line paste fix" subsection)
- Plugin:
Tests
- 1 new regression test in
test/specs/table-cursor-suppression.e2e.ts(#136): parent cursor hidden after entering cell edit viai - 7 new tests in
test/specs/vim-builtin/normal-yank-put.e2e.ts(#139):v + p,V + p,V + P,v + P, visual paste unnamed register update,v + gp, normal mode return after visual paste - 4 new Neovim golden test definitions in
test/neovim/test-definitions.ts(#139):v + p,V + p,V + P,v + P— all verified against Neovim - Recorded golden data in
test/neovim/golden-data/normal-yank-put.json
Documentation
CHANGELOG.mdKNOWN_LIMITATIONS.md: marked parent cursor visible during cell editing as fixed (#136); updated "Table navigation cursor hiding" section with deferred unsuppression inenterCellEditAGENTS.md: addedexitVisualModeto fork API descriptionKNOWN_LIMITATIONS.md: updated yank-ring section (visual-modegp/gPno longer bypass yank-ring); updated V-LINE cursor-only section (fork'scontinuePastenow handles cursor-only selection)- Fork:
~/Repos/codemirror-vim/DIFFERENCES.md: new "Visual-line paste fix" subsection
Full Changelog: 0.122.0...0.123.0