Skip to content

0.76.0

Choose a tag to compare

@github-actions github-actions released this 22 Jul 14:47
· 313 commits to master since this release
0.76.0
025cef9

Added

  • Per-view cursor suppression fork API — added setCursorSuppressedForView(view, suppressed), clearCursorSuppressedForView(view), and isCursorSuppressedForView(view) to the codemirror-vim fork. Per-view overrides take precedence over the global setCursorSuppressed state, allowing the plugin to selectively restore the native cursor in specific contexts (table cell editors, textarea overlays) or force suppression (table navigation) without affecting other editors. Overrides are automatically cleaned up when the editor's BlockCursorPlugin is destroyed.
    • Fork: ~/Repos/codemirror-vim/src/block-cursor.ts (per-view state map, API implementation, cleanup in destroy)
  • Animated cursor vimrc/Lua configuration — all 8 animated cursor settings are now configurable via vimrc (set smoothcursor, set smoothcursorsmoothness=0.3, etc.) and Lua (vim.opt.smoothcursor = true, etc.). Master toggle smoothcursor enables/disables the feature with reloadFeatures(). Sub-options (smoothcursorglide, smoothcursorsmoothness, smoothcursorsmear, smoothcursorstiffness, smoothcursortrailstiffness, smoothcursordamping, smoothcursormaxlength) hot-reload without restart. All use SideEffectOpt pattern syncing both settings[key] and module-level config. Short aliases: sc, scg, scs, scm, scst, scts, scd, scml. (#78)
    • Plugin: src/vimrc/loader.ts (16 SideEffectOpt entries), src/settings.ts (animatedCursor added to RELOAD_KEYS)
  • Animated cursor in oil explorer — animated cursor now renders in the oil file explorer. Single shared canvas architecture: one canvas on .app-container owned by AnimatedCursorManager, shared by all controllers. Reduces memory from O(N × viewport) to O(1 × viewport). Each controller clips drawing to its own editor bounds via ctx.clip(). MAX_CONTROLLERS raised from 8 to 16 with warning log on capacity. Canvas lifecycle managed by the manager (created on first register, removed when last controller deregisters). Null-check on canvas.getContext('2d') for browser canvas limits. Table cell editors and textarea vim overlays fall back to the native cursor. (#78)
    • Plugin: src/vim/animated-cursor/manager.ts (shared canvas ownership, sizing, lifecycle), src/vim/animated-cursor/controller.ts (removed per-controller canvas, draws on shared context), src/oil/oil-view.ts (injects createAnimatedCursorExtension() when enabled)

Fixed

  • Fold gutter click does not unfold — clicking a fold marker (▾) in the fold column or statuscolumn gutter folded the region correctly but clicking again to unfold had no effect. The unfoldEffect was dispatched with { from: line.from, to: line.from } (zero-width range) instead of the actual fold range, so CodeMirror found no matching fold decoration to remove. Fixed by capturing the fold's end position from foldedRanges().between() and passing the full { from, to } range to unfoldEffect. (#80)
    • Plugin: src/vim/fold-column.ts (click handler), src/vim/statuscolumn.ts (handleFoldClick)

Documentation

  • CHANGELOG.md
  • KNOWN_LIMITATIONS.md: Added fold gutter unfold fix to folding section
  • README.md: Added vimrc/Lua configuration to animated cursor feature description
  • CONTRIBUTING.md: Updated manager.ts and config.ts descriptions for Phase 3 architecture
  • AGENTS.md: Updated codemirror-vim fork description with per-view cursor suppression API
  • docs/features/animated-cursor.md: Added vimrc/Lua configuration section and oil explorer support section
  • docs/configuration/vimrc.md: Added smoothcursor, smoothcursorsmoothness, smoothcursorsmear to boolean options; added smoothcursorsmoothness, smoothcursorstiffness, smoothcursortrailstiffness, smoothcursordamping, smoothcursormaxlength to number options
  • docs/configuration/lua-config.md: Added all 8 smoothcursor* entries to vim.opt options table

Full Changelog: 0.75.1...0.76.0