pkgsrc-Changes archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
CVS commit: pkgsrc/editors/reovim
Module Name: pkgsrc
Committed By: pin
Date: Thu Jan 15 18:23:44 UTC 2026
Modified Files:
pkgsrc/editors/reovim: Makefile cargo-depends.mk distinfo
pkgsrc/editors/reovim/patches: patch-Cargo.toml
Log Message:
editors/reovim: update to 0.8.1
## [0.8.1] - Unreleased
### Changed
- **Screen module reorganization** - Better separation of concerns
- Created `render/` submodule: chrome (status/tab/cmd line), line, pipeline, separator
- Created `layout/` submodule: split tree, tab management
- Created `WindowStore` as single source of truth for windows
- Simplified `Window` struct from 14 fields to 8 fields:
- `bounds: WindowRect` (combines x, y, width, height)
- `viewport: Viewport` (combines scroll, cursor, desired_col)
- `config: WindowConfig` (groups line_number, scrollbar, sign_column, border)
- `id: WindowId` (type-safe wrapper instead of raw usize)
### Added
- **Enhanced Markdown Decorations** (Epic #89) - Complete markdown rendering overhaul
- **Phase 1: Heading Decorations** (#90)
- Heading indentation by level (H1=0, H2=1 space, H3=2 spaces, etc.)
- Inline code span background styling with backtick concealment
- Link background styling for distinct link appearance
- Strikethrough styling with `~~` marker concealment
- **Phase 2: Horizontal Rules and Blockquotes** (#91)
- Horizontal rules: `---`/`***`/`___` → full-width `────────` line
- Blockquotes: `>` → `│ ` vertical bar with background color
- **Phase 3: Table Border Decorations** (#92)
- Visual unicode borders (─│┌┐└┘├┤┬┴┼) around markdown tables
- Cells expand to uniform width with proper padding
- New `MarkdownTableBorderStage` render stage
- `virtual_lines` system in RenderData for rendering lines above/below content
- **% motion for matching bracket navigation** (Issue #123) - Jump between matching brackets
- Supports `()`, `[]`, `{}` bracket pairs
- Vim-compatible behavior: cursor on bracket jumps to match, otherwise searches forward on line
- Inclusive motion for operator support (`d%`, `y%`, `c%`)
- Added `Motion::MatchingBracket` variant to core motion system
- Added `CursorMatchingBracketCommand` with `%` keybinding
- **Backtick auto-pair completion** (Issue #124) - Auto-close backticks when typing
- Typing `` ` `` now auto-completes to ``` `` ``` with cursor between
- Useful for markdown inline code, JavaScript template literals, shell command substitution
- Added to pair plugin rainbow bracket highlighting
- **Explorer backspace and dot navigation** (Issue #128) - Navigate directories with Backspace and dot
- `<Backspace>` in explorer navigates up to parent directory (changes root)
- `.` sets current selection as new root directory
- Matches nvim-tree behavior (navigate up with backspace, set root with dot)
- Backspace still works for text deletion in input mode (create/rename/filter)
- **Sticky context headers** (Issue #88) - Overlay at viewport top showing enclosing scopes
- Displays 1-3 parent scope headers as user scrolls through files
- Works with both markdown headings and code scopes (functions, classes, impl blocks)
- Uses same ContextProvider infrastructure as statusline breadcrumbs (#130, #131, #132)
- Buffer content passed via EditorContext (same pattern as #133) for markdown support
- Settings: `sticky_headers_enabled`, `sticky_headers_max_count`, `sticky_headers_show_separator`
- z-order 125 overlay window using PluginWindow trait
- Auto-queries context at top visible line
- **TreesitterContextProvider** - AST-based scope detection for breadcrumb navigation (#132)
- Detects code hierarchy (functions, classes, impl blocks, methods) by analyzing treesitter parse tree
- Multi-language support: Rust, Python, JavaScript, C, C++, Go, Java
- Provides context at cursor position: e.g., `> mod.rs > impl Screen > fn render_windows`
- Phase 3 of context provider system, enables statusline breadcrumb integration
- **Core ContextProvider trait and registry** (Issue #130) - Foundation for plugin-based context/scope detection
- `ContextProvider` trait with `get_context()`, `name()`, `supports_buffer()` methods
- `ContextItem` struct for representing individual context levels (text, line range, kind, level)
- `ContextHierarchy` struct with helper methods (`to_breadcrumb()`, `current_scope()`, `at_level()`)
- Multi-provider registry in `PluginStateRegistry` with priority-based resolution
- Enables future implementations: markdown headings, treesitter AST nodes, LSP symbols
- **Markdown Context Provider** (Issue #131) - Detect heading hierarchy in markdown files
- `MarkdownContextProvider` implementation with tree-sitter parsing
- Supports H1-H6 ATX-style headings (`#`, `##`, `###`, etc.)
- Smart caching with content hash for performance (>95% cache hit rate)
- Stack-based hierarchy algorithm for nested headings
- Returns breadcrumb format: `> CLAUDE.md > Architecture > Workspace Structure`
- Extended `ContextProvider` trait API to pass `content: &str` parameter
- 7 comprehensive unit tests covering edge cases
- **Context breadcrumb in statusline** (Issue #133) - Shows current scope hierarchy in statusline
- Displays breadcrumb like: ` > CLAUDE.md > Section > Subsection > `
- Works with markdown headings via `MarkdownContextProvider`
- Works with code scopes via `TreesitterContextProvider` (Rust, Python, JS, C, etc.)
- Smart truncation for long names and deep nesting
- Settings: `context_breadcrumb_enabled`, `context_separator`, `context_max_items`
- Extended `StatuslineRenderContext` to include active buffer content, ID, and cursor position
- Completes Epic #129 (Context Provider Trait System)
- **Scope navigation commands** (Issue #133) - Jump between scope headers with keyboard shortcuts
- `gu` - Jump to parent scope (go up)
- `[s` - Jump to previous scope header (placeholder - TODO)
- `]s` - Jump to next scope header (placeholder - TODO)
- Works across all languages with context providers
- Commands registered in treesitter plugin with keybindings
- **File explorer visual enhancements** (Issue #127) - nvim-tree style coloring and tree structure
- **Dedicated FileExplorerStyles** in theme system with distinct colors for each file category:
- Directories: blue (bold)
- Source files: orange (for .rs, .py, .js, etc.)
- Config files: gray/dimmed (for .toml, .yaml, .json)
- Documentation: cyan (for README, .md)
- Data files: magenta (for .csv, .sql, .db)
- Media files: pink (for images, audio, video)
- Special files: yellow (for LICENSE, .gitignore)
- Lock files: dimmed yellow (for Cargo.lock, package-lock.json)
- Executable files: green (for shell scripts, binaries)
- Hidden files: dimmed gray
- Box-drawing characters (│, ├, └) for visual tree hierarchy
- Three tree styles: None (indent only), Simple (ASCII ">"), BoxDrawing (Unicode)
- Hidden items count display at bottom: "(N hidden)" when hidden files are not shown
- Explorer settings section with options:
- `explorer.enable_colors` - Toggle file type coloring (default: true)
- `explorer.tree_style` - Choose tree drawing style (default: "box_drawing")
- `explorer.show_hidden` - Toggle hidden files visibility (default: false)
- `explorer.show_sizes` - Toggle file size display (default: false)
### Enhanced
- **Bidirectional multi-char search** (Issue #125) - `s` key now searches both directions simultaneously
- Added `Direction::Both` variant to support bidirectional search
- Labels prioritize by distance (Manhattan distance from cursor)
- Closest matches get simpler labels (s, f, n, j, k...)
- Works with operators: `dsab` deletes to closest match in either direction
- **Viewport-limited jump labels** (Issue #126) - Range-finder labels now only appear within visible viewport
- Added `active_window_height` field to EditorContext
- Jump labels filtered by viewport boundaries in render
- Dramatically reduces visual clutter in large files (100+ matches → ~50 visible labels)
- Labels update automatically when scrolling
### Fixed
- **Cursor no longer moves into padding areas in decorated tables** (#89)
- Added `col_mapping` to `DecorationKind::Conceal` for buffer→visual column translation
- Position-based mapping algorithm that skips padding areas
- Cursor stays on content characters, jumps directly to trailing space/pipe
- **Visual mode now disables decorations on selected lines** (#89)
- Replaced single-line `is_insert_mode` with `skip_decoration_lines: HashSet<usize>`
- In visual mode, all selected lines show raw markdown (like insert mode)
- Works with visual (`v`), visual line (`V`), and visual block (`Ctrl-V`) modes
- **Multiple Conceal decorations per line now render correctly** (Issue #143)
- Changed from single-index iterator to multi-decoration lookup
- Now finds ALL decorations covering each character position
- Conceal decorations can now apply background styles when both are present
- Enables proper rendering of markdown table pipes and other multi-conceal scenarios
### Changed
- **reo-cli**: Changed default output format for `keys` command from `plain_text` to `raw_ansi` for better visual feedback (Issue #134)
- **reo-cli**: Added `--format` flag to `keys` command to allow choosing output format (raw_ansi, plain_text, cell_grid)
## [0.8.0] - 2026-01-09
### Fixed
- **tokio::spawn panics in EventBus handlers** (Issue #120) - Fix plugins using `tokio::spawn()` after PR #85 moved EventBus to std::thread
- Capture `tokio::runtime::Handle::current()` at `subscribe()` start (runs in tokio context)
- Use `handle.spawn()` instead of `tokio::spawn()` in EventBus handlers
- Affected: completion (BufferModified), LSP (GotoDefinition, GotoReferences, ShowHover)
### Performance
- **Priority channels for user input events** (Issue #95, #86) - Dual-channel architecture for responsive user experience
- Separates high-priority user input from low-priority background events
- `hi_tx/hi_rx` (64 capacity): user input, mode changes, text insertion
- `lo_tx/lo_rx` (255 capacity): render signals, plugins, background tasks
- Biased `select!` ensures high-priority events processed first
- `MAX_LO_DRAIN=16` provides fairness for background events
- Auto-pair latency reduced from ~100ms to ~92us (1000x improvement, closes #86)
### Added
- **GitHub Actions CI pipeline** (Issue #121) - Automated code quality checks on PRs and pushes to develop
- Format check with `cargo fmt --all --check`
- Clippy with zero-warning enforcement (`-D warnings`)
- Build verification for entire workspace
- Unit tests and doc tests
- Rust cache for faster subsequent builds
- **Dynamic content in DisplayRegistry** (Issue #57) - Allow plugins to show contextual status line info
- `DisplayContext` struct for render context with `PluginStateRegistry` access
- `DynamicDisplayFn` type alias for dynamic display callbacks
- `DisplayInfo::with_dynamic()` method for fluent configuration
- `DisplayInfoBuilder::dynamic()` builder method
- `DisplayRegistry::display_string()` now takes `PluginStateRegistry` and invokes dynamic callbacks
- Enables dynamic status like "Explorer (3 files)" or "Telescope (42 results)"
- **Window resize operations** (Issue #54) - Implement direction-specific window resizing
- `SplitNode::adjust_ratio_in_direction()` - Find innermost split matching direction and adjust ratio
- `Screen::resize_window(direction, delta)` - Public API for resizing active window
- `WindowAction::Resize` handler now functional (5% ratio change per unit delta)
- Vertical direction adjusts width, Horizontal direction adjusts height
- **Mouse click and scroll support** (Issue #59) - Basic mouse interaction for cursor positioning and scrolling
- Left click: Move cursor to clicked position and focus window if different
- Scroll wheel: Move viewport up/down by 3 lines, cursor adjusts to stay visible
- Coordinate translation: Screen position to buffer position with gutter and scrollbar awareness
- Server mode support: Mouse events forwarded in dual-output mode
- **Theme customization/override system** (Issue #55) - Allow users to override individual colors/styles in TOML config
- `ThemeOverrides` struct for storing style path -> override mappings
- `StyleOverride` struct with fg, bg, underline_color, and attribute options
- `parse_color()` function supporting hex, rgb(), ansi:N, and named color formats
- `Theme::from_name_with_overrides()` and `Theme::apply_overrides()` methods
- `editor.theme_overrides` field in profile config schema
- Example config:
```toml
[editor.theme_overrides]
"statusline.background" = { bg = "#1a1b26" }
"gutter.line_number" = { fg = "#565f89" }
"statusline.mode.normal" = { fg = "#1a1b26", bg = "#7aa2f7", bold = true }
```
- **Consolidated mode display logic into DisplayRegistry** (Issue #53) - Centralize all mode display logic in one place
- New `display/icons.rs` module for icon constants
- `DisplayRegistry::mode_icon()` - Get icon for current mode state
- `DisplayRegistry::mode_style()` - Get style for current mode from theme
- `DisplayRegistry::mode_name()` - Get display name ("Normal", "Insert", etc.)
- `DisplayRegistry::short_mode_name()` - Get short name ("NORMAL", "INSERT", etc.)
- `DisplayRegistry::hierarchical_display()` - Build "Kind | Mode | SubMode" string
- Removed duplicate logic from `Screen` (was `get_mode_style()`, `get_mode_name()`)
- Removed `ModeState::hierarchical_display()` - use `DisplayRegistry` instead
- `ModeSnapshot::from_mode()` added for RPC serialization with display registry
- **Metadata-driven interactor input behavior** (Issue #46) - Refactored `accepts_char_input()` to use registry instead of hardcoded checks
- `InteractorConfig` struct for configuring input behavior per interactor
- `InteractorRegistry` for storing and querying interactor configurations
- `accepts_char_input_with(registry)` method on `ModeState` for registry-based lookup
- `PluginContext::register_interactor()` for plugins to register their input behavior
- Window mode registered via `InteractorConfig::using_keymap()` instead of hardcoded exclusion
- Default behavior: unregistered interactors accept character input (safe default)
- **HandlerContext mode change helpers** (Issue #44) - Reduce mode change boilerplate
- `enter_interactor_mode(component_id)` - Enter interactor sub-mode for text input
- `exit_to_normal()` - Return to normal editor mode
- `set_mode(mode)` - Set arbitrary mode state for edge cases
- Updated Range-Finder plugin: 5 mode changes simplified
- Updated Microscope plugin: 1 mode change simplified
- **Subscription helper macros** (Issue #41) - Reduce plugin boilerplate with three new macros
- `subscribe_state!` - Simple state mutation + render pattern (4 variants)
- `subscribe_state_mode!` - State mutation + mode change + render (2 variants)
- `subscribe_state_conditional!` - Conditional render based on return value (4 variants)
- Migrated Explorer plugin: 23 subscription blocks (~180 lines saved)
- Migrated Range-Finder plugin: 5 subscription blocks (~30 lines saved)
- Total: ~210 lines of boilerplate removed across 28 subscription blocks
- **`subscribe_targeted()` API for EventBus** (Issue #45) - New method to automatically filter events by component ID
- `TargetedEvent` trait for events with a `target: ComponentId` field
- Implemented for `PluginTextInput`, `PluginBackspace`, and `RequestFocusChange`
- Eliminates boilerplate target-checking code in plugin event handlers
- Migrated 7 subscriptions across 4 plugins (Explorer, Microscope, Range-finder, Which-key)
### Changed
- **Remove dead status line code** (Issue #50) - Delete unused `StatusLineComponent` and consolidate duplicates
- Deleted `lib/core/src/component/status_line.rs` (303 lines) - `StatusLineComponent` was never instantiated
- Deleted `lib/core/src/screen/status_line.rs` (256 lines) - `StatusLineRenderer` trait was never called
- Removed `impl StatusLineRenderer for Screen` (31 lines) - Only consumer of deleted functions
- Active rendering uses `Screen::render_status_line_to_buffer()` which remains unchanged
- Fixes OperatorPending style bug (was in dead code path using wrong style)
- **Remove unused cursor and animation theme features** (Issue #49) - Dead code cleanup
- Removed `CursorStyles` struct (line, column, glow, pulse fields never accessed)
- Removed `EffectConfig` struct (never instantiated)
- Removed `AnimationConfig` struct (actual animation system uses hardcoded frame rate)
- Removed `HighlightGroup::CursorEffect` enum variant (never applied)
- Updated docs/animation-system.md to remove future config section
- **RAII-based cursor synchronization** (Issue #48) - Centralize cursor sync between windows and buffers
- Added `Screen::save_cursor_to_active_window()` for pre-split cursor save
- Added `Screen::switch_active_window()` for full cursor handoff during navigation
- Refactored `handle_window_split()` to use centralized API (15 lines → 1 call)
- Refactored `handle_window_navigate()` to use centralized API (50 lines → direction lookup + 1 call)
- Eliminates manual cursor sync scattered across handlers, reducing error risk
- **Split large subscribe() methods** (Issue #52) - Improve plugin maintainability by splitting monolithic subscribe() methods
- Explorer plugin: Split 426-line method into 9 focused sub-methods (raw_input, navigation, tree_operations, clipboard, file_operations, input_handling, visual_mode, focus_visibility, popup)
- Range-Finder plugin: Split 191-line method into 5 focused sub-methods (jump_mode_handlers, jump_input_handler, fold_handlers, cleanup)
- Removed `#[allow(clippy::too_many_lines)]` pragmas from both plugins
- **Decomposed window render_to_buffer() method** (Issue #51) - Extract focused helper methods for better testability
- `compute_line_number_width()` - Calculate line number column width
- `render_fold_marker_to_buffer()` - Render collapsed fold indicators
- `render_empty_lines_to_buffer()` - Fill viewport with tilde markers
- Main method reduced from ~106 to ~82 lines with clearer separation of concerns
- **Declarative mode metadata** (Issue #42) - Replace hardcoded `mode_for_command()` with `resulting_mode()` trait method
- Added `resulting_mode()` method to `CommandTrait` with default `None` return
- Implemented for 32 mode-changing commands (mode, window, operator, command-line)
- Replaced 60-line string matching function with 6-line trait-based lookup
- Provides compile-time safety: no more missing match arms causing flaky tests
- Fixed bug: `enter_visual_line_mode` was missing from old implementation
- **Unified active buffer tracking** (Issue #47) - Removed redundant `active_buffer_id` field from Runtime
- Screen is now the single source of truth for active buffer ID
- `Runtime::active_buffer_id()` method derives value from `Screen::active_buffer_id()`
- Eliminates dual tracking and manual synchronization between Runtime and Screen
- Simplifies buffer switching, file opening, and window navigation code
- **Window move commands use SwapDirection** (Issue #54) - 8 move commands now use `SwapDirection` instead of `MoveDirection`
- `WindowMoveLeft/Down/Up/Right` commands and their window-mode variants now perform actual swaps
- Consistent behavior between move and swap operations
### Removed
- **`WindowAction::MoveDirection`** (Issue #54) - Removed redundant enum variant
- Was identical in purpose to existing `SwapDirection` but never implemented
- 8 commands updated to use `SwapDirection` directly
### Fixed
- **Light theme syntax highlighting** (Issue #43) - Light theme now uses proper One Light colors
- Added `light_palette` module with Atom One Light colors (red, blue, purple, green, cyan, orange, yellow)
- Created `TreesitterTheme::light()` with comprehensive capture mappings
- Fixed `from_theme_name()` to correctly return light theme instead of dark
- 3 new tests for light theme functionality
- **RegisterOption events not processed** (Issue #39) - Options registered via `bus.emit(RegisterOption)` are now properly added to the option registry
- `:set` commands now work for all core options (signcolumn, number, tabwidth, etc.)
- Fix: Create OptionRegistry before plugins subscribe and add event handler
## [0.7.10] - 2026-01-06
### Fixed
- **reo-cli REPL help text** (Issue #36) - Help text now auto-generated from clap definitions
- Fixed incorrect `screen` command description (said "dimensions" but returned content)
- Removed non-existent `screen-content` command from help
- Added `screen-size` command for getting dimensions
- Added `capture` as visible alias for `screen` command
- Help text now always matches implementation (single source of truth)
- Added 10 unit tests for command parsing and help generation
### Added
- **Sign column and virtual text configuration** (Issue #29) - Phase 3 of diagnostics system (#21)
- Sign column modes: `auto`, `yes`, `no`, `number`
- `auto`: Show sign column only when signs are present (width 2)
- `yes`: Always show sign column (default, width 2)
- `no`: Never show sign column
- `number`: Display signs as background color on line numbers
- Virtual text options: `:set virtual_text`, `virtual_text_prefix`, `virtual_text_max_length`, `virtual_text_show`
- `virtual_text` (bool): Enable/disable virtual text display
- `virtual_text_prefix` (string): Custom prefix (empty = use severity icons)
- `virtual_text_max_length` (number): Maximum length before truncation (default: 80)
- `virtual_text_show` (string): "first", "highest", or "all" mode
- Settings menu integration for all new options under "Diagnostics" section
- 14 new tests for sign column modes and virtual text configuration
- **Virtual text system for inline diagnostics** (Issue #28) - Display diagnostic messages after line content
- `VirtualTextEntry` type with text, style, and priority fields
- `VirtualTextStyles` in theme for severity-based styling (error, warn, info, hint)
- Rendering with automatic truncation and ellipsis when exceeding viewport
- LSP integration: severity icons (● error, ◐ warning, ⓘ info, · hint) + message
- Priority-based resolution (ERROR 404 > WARNING 403 > INFO 402 > HINT 401)
- 44 new tests covering all virtual text functionality
- **Multi-instance server support** (Issue #19) - Multiple reovim servers can now run concurrently
- Port fallback: When default port (12521) is in use, server automatically tries 12522, 12523, etc.
- Port files: Each server writes `~/.local/share/reovim/servers/<pid>.port` for discovery
- `reo-cli list` command: Lists all running reovim server instances with PID and port
- Auto-discovery: `reo-cli` auto-connects to single server, prompts when multiple servers running
- Clean shutdown: Port files automatically removed when server exits
- **Ex-command registry system** - Plugins can now register custom ex-commands dynamically
- `ExCommandRegistry` for thread-safe command registration and dispatch
- `RegisterExCommand` event for plugin-based command registration
- Support for three command patterns: zero-arg, single-arg, and subcommand
- All handlers include descriptions for help/completion systems
- **Profile trait system** - Framework for extensible configuration profiles
- `Configurable` trait for components that participate in profile save/load
- `ProfileRegistry` for coordinating serialization across all registered components
- `RegisterConfigurable` event for plugin components to register for profile management
- Profile events: `ProfileLoadEvent`, `ProfileSaveEvent`, `ProfileListEvent`
- **ProfilesPlugin** - New plugin for profile command handling
- `:profile list` - Open profile picker
- `:profile load <name>` - Load a profile by name
- `:profile save <name>` - Save current settings as a profile
- **Health check system** - Diagnostic system for verifying core and plugin status
- `:health` and `:checkhealth` commands to open health check modal
- Modal UI (z-order 700) with category grouping and navigation (j/k, r, q/Esc)
- Expandable details view - press Space/Enter to toggle full details for selected check
- `RegisterHealthCheck` event for plugins to register custom health checks
- Built-in checks for runtime, plugin system, event bus, terminal, and keybindings
- Plugin-decoupled architecture - zero core modifications using v0.7.9+ ex-command registry
- **Plugin-specific status line styling** - Plugins can now provide custom colors for status line
- Each plugin defines its own `Style` with custom fg/bg colors
- Visual identity: Explorer (orange), Microscope (blue), Settings (gray), Leap (green), Health (teal), Jump (gold)
- Status line shows `[INTERACTOR][MODE]` as separate colored sections
- `Color` type exported from `reovim_core::highlight` for plugin use
- **LSP debugging tools** (Issue #26) - Tools for debugging LSP communication
- LSP health check: Shows server status, document count, diagnostic stats, and timestamps in `:health` modal
- `:LspLog` command to open the latest LSP log file directly in the editor
- Dedicated LSP log: `--lsp-log` flag for capturing JSON-RPC messages to separate file
- `--lsp-log=default` creates timestamped `lsp-<timestamp>.log` in data directory
- `--lsp-log=/path/to/file.log` for custom path
- `--lsp-log=default:LEVEL` or `--lsp-log=/path:LEVEL` for configurable verbosity
- Supported levels: error, warn, info, debug, trace (default: trace)
- Logs show `->` for outgoing and `<-` for incoming messages
- **Request-driven cursor movement with operator support** - Plugin-to-runtime communication for cursor positioning
- `RequestCursorMove` event allows plugins to request cursor movement
- `Motion::JumpTo { line, column }` variant for absolute positioning
- `InnerEvent::MoveCursor` for runtime event loop handling
- Automatic operator integration: `d`/`y`/`c` + jump creates `OperatorMotionAction`
- Runtime detects `OperatorPending` mode and applies operators to jump targets
- Enables jump navigation, LSP goto-definition, and other plugin-driven navigation with full vim operator semantics
### Fixed
- **LSP diagnostics not received after opening files** (Issue #26)
- rust-analyzer uses LSP 3.17 "pull diagnostics" instead of push notifications
- Now request diagnostics immediately after `textDocument/didOpen`
- Handle `workspace/diagnostic/refresh` requests from server
### Changed
- **DisplayInfo API (BREAKING)** - Simplified and made styling mandatory
- `DisplayInfo::new()` now requires `style: Style` parameter
- Removed `EditModeKey`, `SubModeKey` enums (mode-specific displays removed)
- Removed `DisplayInfoBuilder::when_mode()` and `when_sub_mode()` methods
- `DisplayRegistry` simplified to single HashMap lookup
- `register_builtins()` now requires `theme` parameter
- Plugins must update to provide styles when registering display info
- **Ex-command architecture refactored** - Full decoupling of core from plugin-specific commands (Issue #13)
- Removed `Settings`, `ProfileLoad`, `ProfileSave`, `ProfileList` variants from `ExCommand` enum
- Added generic `Plugin { command: String }` variant for all plugin-registered commands
- Settings menu now registers `:settings` command via `RegisterExCommand` event
- Profile commands now handled by dedicated ProfilesPlugin
- Core handlers dispatch to registry instead of hardcoded match arms
- **Paste animation** - Visual pulse animation feedback for paste operations
- Cyan pulsing glow (600ms, 2 cycles) when pasting with `p` or `P`
- Distinct from yank's gold fade animation
- Works with both characterwise and linewise paste
- Helps locate pasted content in large files
- **Performance logging reduced** - [RTT] performance logs lowered from debug to trace level
- Render timing, event loop, pipeline execution now require TRACE log level
- Reduces noise in DEBUG logs while still available for performance analysis
- Affects 10+ log statements across runtime, screen, and render modules
### Fixed
- **Yank animation for linewise motions** - `yj` and `yk` now correctly highlight entire lines
- Previously only highlighted partial lines (current line for `yj`, upper line for `yk`)
- Now properly animates all yanked lines from start to end
- Affects all linewise motions: `j`, `k`, `gg`, `G`
- **Markdown decorations update immediately on insert/change** - Fixed stale cache bug in saturator
- Saturator now calls `decorator.refresh()` before `decoration_range()` to update cached parse tree
- Mirrors the pattern from syntax highlighting (`update_highlights()`)
- Heading icons, bullets, checkboxes, and emphasis concealment now update in real-time
- **Decorations disabled on cursor line in insert mode** - Show raw markdown syntax while typing
- When in insert mode, decorations are filtered out on the current line
- Allows seeing raw markers (`# Heading`, `**bold**`, etc.) while editing
- Decorations reappear when returning to normal mode
### Changed
- **Code cleanup in markdown plugin** - Removed dead code and streamlined query loading
- Deleted `markdown/mod.rs` (685 lines of dead code, obsolete LanguageRenderer implementation)
- Converted embedded query constants to `.scm` files via `include_str!()` (57 lines → 2 lines)
- Queries now editable in `.scm` files with syntax highlighting support
- Total reduction: ~740 lines
- **Range-Finder plugin** - Merged Leap and Fold plugins into unified navigation system
- Combined jump navigation and code folding into single `reovim-plugin-range-finder` plugin
- New architecture: `src/jump/` (navigation subsystem) + `src/fold/` (visibility subsystem)
- Multi-char search: `s` + 2 chars + label to jump (leap-style navigation)
- Enhanced f/t motions: `f`/`F`/`t`/`T` now use label selection for multiple matches
- Smart auto-jump: 1 match → instant, 2-676 matches → show labels, >676 → cancel
- Code folding: `za`/`zo`/`zc`/`zR`/`zM` (unchanged functionality)
- Home row priority labels: `sfnjklhodweimbuyvrgtaqpcxz`
- Single-char labels for <=26 matches, two-char labels for >26 matches (up to 676)
- Two-char label input: first character validates, second completes the jump
- Label overlay rendering with z-order 200 (above editor, below popups)
- **BREAKING**: `f`/`F`/`t`/`T` keys now trigger leap-style label selection (replaces default vim single-char find/till)
- Removed separate `reovim-plugin-leap` and `reovim-plugin-fold` plugins
- Total plugin size: ~2,000 lines (vs 2,295 lines for separate plugins)
- `[text](url)` → `text` (brackets and URL hidden)
- **Table rendering** - Header and delimiter row styling
- Header row background highlighting
- Delimiter row dimmed styling via `pipe_table*` node captures
- **Style system enhancements** - Added new text attributes
- Added `BLINK` and `DIM` attribute constants
- Added `blink()` and `dim()` builder methods to `Style`
- **Conceal style merging** - Fixed replacement character styling
- Conceal replacement chars now use conceal's style merged with syntax highlights
- Heading icons display with proper bold + color styling
- **Insert mode raw display** - Show raw markdown when editing
- Decorations disabled in insert mode for accurate cursor positioning
- Raw `#`, `*`, `**`, `[]()` markers visible during editing
- Returns to concealed view on mode exit
- `lib/core/src/component/mod.rs` - Component module exports
- `lib/core/src/component/display.rs` - DisplayComponent trait + RenderContext
- `lib/core/src/component/status_line.rs` - StatusLineComponent
- `lib/core/src/component/tab_line.rs` - TabLineComponent
### Testing
- 318 unit tests passing
- All integration tests passing
To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 pkgsrc/editors/reovim/Makefile
cvs rdiff -u -r1.2 -r1.3 pkgsrc/editors/reovim/cargo-depends.mk \
pkgsrc/editors/reovim/distinfo
cvs rdiff -u -r1.1 -r1.2 pkgsrc/editors/reovim/patches/patch-Cargo.toml
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: pkgsrc/editors/reovim/Makefile
diff -u pkgsrc/editors/reovim/Makefile:1.3 pkgsrc/editors/reovim/Makefile:1.4
--- pkgsrc/editors/reovim/Makefile:1.3 Mon Jan 5 18:45:08 2026
+++ pkgsrc/editors/reovim/Makefile Thu Jan 15 18:23:44 2026
@@ -1,6 +1,6 @@
-# $NetBSD: Makefile,v 1.3 2026/01/05 18:45:08 pin Exp $
+# $NetBSD: Makefile,v 1.4 2026/01/15 18:23:44 pin Exp $
-DISTNAME= reovim-0.7.9
+DISTNAME= reovim-0.8.1
CATEGORIES= editors
MASTER_SITES= ${MASTER_SITE_GITHUB:=ds1sqe/}
GITHUB_TAG= v${PKGVERSION_NOREV}
@@ -8,7 +8,7 @@ GITHUB_TAG= v${PKGVERSION_NOREV}
MAINTAINER= pkgsrc-users%NetBSD.org@localhost
HOMEPAGE= https://github.com/ds1sqe/reovim/
COMMENT= Rust-powered neovim-like text editor
-LICENSE= mit
+LICENSE= mit #gnu-agpl-v3
.include "cargo-depends.mk"
Index: pkgsrc/editors/reovim/cargo-depends.mk
diff -u pkgsrc/editors/reovim/cargo-depends.mk:1.2 pkgsrc/editors/reovim/cargo-depends.mk:1.3
--- pkgsrc/editors/reovim/cargo-depends.mk:1.2 Mon Jan 5 18:45:08 2026
+++ pkgsrc/editors/reovim/cargo-depends.mk Thu Jan 15 18:23:44 2026
@@ -1,4 +1,4 @@
-# $NetBSD: cargo-depends.mk,v 1.2 2026/01/05 18:45:08 pin Exp $
+# $NetBSD: cargo-depends.mk,v 1.3 2026/01/15 18:23:44 pin Exp $
CARGO_CRATE_DEPENDS+= adler2-2.0.1
CARGO_CRATE_DEPENDS+= aho-corasick-1.1.4
@@ -49,6 +49,8 @@ CARGO_CRATE_DEPENDS+= crunchy-0.2.4
CARGO_CRATE_DEPENDS+= deranged-0.5.5
CARGO_CRATE_DEPENDS+= derive_more-2.1.0
CARGO_CRATE_DEPENDS+= derive_more-impl-2.1.0
+CARGO_CRATE_DEPENDS+= dirs-6.0.0
+CARGO_CRATE_DEPENDS+= dirs-sys-0.5.0
CARGO_CRATE_DEPENDS+= dispatch2-0.3.0
CARGO_CRATE_DEPENDS+= displaydoc-0.2.5
CARGO_CRATE_DEPENDS+= document-features-0.2.12
@@ -78,6 +80,7 @@ CARGO_CRATE_DEPENDS+= futures-task-0.3.3
CARGO_CRATE_DEPENDS+= futures-timer-3.0.3
CARGO_CRATE_DEPENDS+= futures-util-0.3.31
CARGO_CRATE_DEPENDS+= gethostname-1.1.0
+CARGO_CRATE_DEPENDS+= getrandom-0.2.16
CARGO_CRATE_DEPENDS+= getrandom-0.3.4
CARGO_CRATE_DEPENDS+= globset-0.4.18
CARGO_CRATE_DEPENDS+= half-2.7.1
@@ -104,6 +107,7 @@ CARGO_CRATE_DEPENDS+= itoa-1.0.15
CARGO_CRATE_DEPENDS+= js-sys-0.3.83
CARGO_CRATE_DEPENDS+= lazy_static-1.5.0
CARGO_CRATE_DEPENDS+= libc-0.2.178
+CARGO_CRATE_DEPENDS+= libredox-0.1.12
CARGO_CRATE_DEPENDS+= linux-raw-sys-0.11.0
CARGO_CRATE_DEPENDS+= litemap-0.8.1
CARGO_CRATE_DEPENDS+= litrs-1.0.0
@@ -132,6 +136,7 @@ CARGO_CRATE_DEPENDS+= objc2-io-surface-0
CARGO_CRATE_DEPENDS+= once_cell-1.21.3
CARGO_CRATE_DEPENDS+= once_cell_polyfill-1.70.2
CARGO_CRATE_DEPENDS+= oorandom-11.1.5
+CARGO_CRATE_DEPENDS+= option-ext-0.2.0
CARGO_CRATE_DEPENDS+= page_size-0.6.0
CARGO_CRATE_DEPENDS+= parking_lot-0.12.5
CARGO_CRATE_DEPENDS+= parking_lot_core-0.9.12
@@ -153,6 +158,7 @@ CARGO_CRATE_DEPENDS+= radix_trie-0.2.1
CARGO_CRATE_DEPENDS+= rayon-1.11.0
CARGO_CRATE_DEPENDS+= rayon-core-1.13.0
CARGO_CRATE_DEPENDS+= redox_syscall-0.5.18
+CARGO_CRATE_DEPENDS+= redox_users-0.5.2
CARGO_CRATE_DEPENDS+= regex-1.12.2
CARGO_CRATE_DEPENDS+= regex-automata-0.4.13
CARGO_CRATE_DEPENDS+= regex-syntax-0.8.8
Index: pkgsrc/editors/reovim/distinfo
diff -u pkgsrc/editors/reovim/distinfo:1.2 pkgsrc/editors/reovim/distinfo:1.3
--- pkgsrc/editors/reovim/distinfo:1.2 Mon Jan 5 18:45:08 2026
+++ pkgsrc/editors/reovim/distinfo Thu Jan 15 18:23:44 2026
@@ -1,4 +1,4 @@
-$NetBSD: distinfo,v 1.2 2026/01/05 18:45:08 pin Exp $
+$NetBSD: distinfo,v 1.3 2026/01/15 18:23:44 pin Exp $
BLAKE2s (adler2-2.0.1.crate) = 4d391e0fcde91c7435ee9a5503fee4a5346f549f1b45e482ce3e1e151d90f8f5
SHA512 (adler2-2.0.1.crate) = 555b2b7ba6f8116acccd0bcd16ed34cc78162c81023cff31a8566ffcd456c03832089fca2d5b668ceaac4fe8f922d31aa9c487f226a36cace294ff4a219bd91d
@@ -147,6 +147,12 @@ Size (derive_more-2.1.0.crate) = 88303 b
BLAKE2s (derive_more-impl-2.1.0.crate) = 27436ad6e20970c9db8a4086e44a0f71bd13fbd0581d83fadc50a2007a2b1ba2
SHA512 (derive_more-impl-2.1.0.crate) = 53877544638f89062d1254d5a29a92f1f021f518a142e3ae25c28fec17ce644b3b6905529f411b5d04078655af9c6405bda7e3ad08d4ecfe220f10e7c6388c7e
Size (derive_more-impl-2.1.0.crate) = 99090 bytes
+BLAKE2s (dirs-6.0.0.crate) = 4f63ff424740a4552b3b41091f43e845e0d720a6091ece6c9a5aefe24c297ca1
+SHA512 (dirs-6.0.0.crate) = f29f0f932aa627bada67db5bd9d2661b5fb3b18d07030f5d88da28de7049eb872a2f35756cf29c094aacbc2429a3a333b54fb94d70e470288d3ca091cf6d4aa8
+Size (dirs-6.0.0.crate) = 14190 bytes
+BLAKE2s (dirs-sys-0.5.0.crate) = 1a5da6fa801a3e637f337f7c4a46854899b08a5fa8ea2b5864edaa713b7cbf58
+SHA512 (dirs-sys-0.5.0.crate) = c2ca362ad04e92c929e2cea4db359de689e512b7c76246c408f40d10f1d47c5dbbd49238e67edc0a251bd642ee292cae88992e5755035c632baec36cd77c10b2
+Size (dirs-sys-0.5.0.crate) = 10157 bytes
BLAKE2s (dispatch2-0.3.0.crate) = 8b95875a9391610bfed7ab6d08f270da884257368e073252b5f211c08c17455e
SHA512 (dispatch2-0.3.0.crate) = 2f0a168885fabe8fb7443994bb666c94ce95d9b1f14eee6e19b185b27d4cb33c5e76f85244cb9e5735566d02b7c61675e42911d6d99b079590dbd124aed56f59
Size (dispatch2-0.3.0.crate) = 54606 bytes
@@ -234,6 +240,9 @@ Size (futures-util-0.3.31.crate) = 16212
BLAKE2s (gethostname-1.1.0.crate) = 5425362777f6d25805b9b3cd4026c17de34f3f5309ac84be9ddc469a0bbfe149
SHA512 (gethostname-1.1.0.crate) = 6b877cb492777bd6646422586ca49fd691e37cc58b79891b976aac1079bc757367ceba81bd2a67ad1606294458851f6b37f25b1827eb29c57f4f687dc3852ba0
Size (gethostname-1.1.0.crate) = 9865 bytes
+BLAKE2s (getrandom-0.2.16.crate) = 8d556c3e6d1449492d42f144e99954f4ff0af1bd7af134f5429e2c1b34f2aeab
+SHA512 (getrandom-0.2.16.crate) = 6391d5322f8ce2ea7d14062d378ae2ffad66622afd58b9f1732e5314b27d3a554c8a008f6d0d133640f11d769ac51ea4acd24e40259e14e2ffce93d5c3c1eb1e
+Size (getrandom-0.2.16.crate) = 40163 bytes
BLAKE2s (getrandom-0.3.4.crate) = 33c5dff491914e401ae5406376d96ab45a8111fbc4be7a05142572fbddd27443
SHA512 (getrandom-0.3.4.crate) = 43c44ec3ba0668f388519b2cefbee63f959f0e078730b3f7563742522e5f4b120472024b95fc94aeb90900a15d327c3573271bb26b2de4785e589a8bc1bc9da8
Size (getrandom-0.3.4.crate) = 50932 bytes
@@ -312,6 +321,9 @@ Size (lazy_static-1.5.0.crate) = 14025 b
BLAKE2s (libc-0.2.178.crate) = e2b638596c308e3ff3aabf12ec9098d818e6e8d6e6fa7d51c3c0f7c1161c0e74
SHA512 (libc-0.2.178.crate) = 968b954e2edde88d14135decd9eaadc31ca1aad80529a6696591c06c4414d615c97ce0873f77bfebe08b862faa5f3cb79a6648ab90734d462bef06e06ea43dde
Size (libc-0.2.178.crate) = 783720 bytes
+BLAKE2s (libredox-0.1.12.crate) = b3fce0661e8e312a234c9733f53b963b2efc1c021f631ebdd276e2835531cf2a
+SHA512 (libredox-0.1.12.crate) = 8206d0cd3faacccb681551d20d9cae977a9fbbb4801aa53daa124633925bae73d1967f6c75ac9718527cd567dc39239a8e97e12e0747bfb3d53b9bb33bcdbc4f
+Size (libredox-0.1.12.crate) = 7469 bytes
BLAKE2s (linux-raw-sys-0.11.0.crate) = 3d3d4fd40dceac1d554150a2e642934b441452c4acd3f05dee235eecb7cf4ea1
SHA512 (linux-raw-sys-0.11.0.crate) = b16261142f3cbd1caa4e0a17ba06dea49f0d4514f583ca511d9c7ba6ef231f18322f37303b7ffacc73ae7f22b81dfd740584ef7bfaf67a9eaf43859d2de1f941
Size (linux-raw-sys-0.11.0.crate) = 2659624 bytes
@@ -396,6 +408,9 @@ Size (once_cell_polyfill-1.70.2.crate) =
BLAKE2s (oorandom-11.1.5.crate) = 07ed06daf37529f4a158aca356899f3e1ba11a1fbf65ca482f5fdaea4c4ecabc
SHA512 (oorandom-11.1.5.crate) = 63daae0b6e352cc52fdb7793aed1ef501ad996507d8e36cf8235068a3feb9f627549961af1a355227b561948c30f6dea17e225dc3f27caebd51116fc4e3a3ba6
Size (oorandom-11.1.5.crate) = 23750 bytes
+BLAKE2s (option-ext-0.2.0.crate) = a179d39823f42e954c5fe82b67b6689a7078b0e88bc659f06354f02ee868b465
+SHA512 (option-ext-0.2.0.crate) = f8539f97b01af97e0b80fc96556002251befa60f8ddd19613311e62f9dc9834d71c22f5d8e7c53c4925046e38cdcf834c3c28042a4da862d6f6a21ddff8d8e56
+Size (option-ext-0.2.0.crate) = 7345 bytes
BLAKE2s (page_size-0.6.0.crate) = 7a9c3e7f4a8f7ffb3a6c328be22d680ebf42f3b74fd77fbfcf51796d9a3e0af5
SHA512 (page_size-0.6.0.crate) = 204faf102760e9f3edc480302a7d7e6b995b7a40850372ebb332cab82b9c8301e761351c7abce93bde9473ad9e944bb07e6c4447d4ee1891f5ae2c261b74b8e5
Size (page_size-0.6.0.crate) = 8479 bytes
@@ -459,6 +474,9 @@ Size (rayon-core-1.13.0.crate) = 73151 b
BLAKE2s (redox_syscall-0.5.18.crate) = 15142008cfcffdfe12059e4c1415d354d0a1f60e4fd392dcf9ac888821a0988b
SHA512 (redox_syscall-0.5.18.crate) = 69f1cfb215666f1243616366711dbd8cadd6bb411121f48f6e4ffd7b25479efa6f900dd072d7cc6e6fb8130d95cdb42f4c0cb4ba9e05b09b1fa676ca32932101
Size (redox_syscall-0.5.18.crate) = 30747 bytes
+BLAKE2s (redox_users-0.5.2.crate) = d0011f3421041f92c786d6b2d28450ffbe6bc270ca2b5853e1206fdfc5ccaa81
+SHA512 (redox_users-0.5.2.crate) = 0468d42c9a5aa9b8811d00b4126115bd7e92f96af4ee136cf5387939474e351fa2c01251473691aeb34f5e4c8e8804938adf1bc83b5edffb6d06869b4b816b7b
+Size (redox_users-0.5.2.crate) = 17280 bytes
BLAKE2s (regex-1.12.2.crate) = d70ec81f3ec28337ffb8280b82a7ac93cf6c962c86ddb8d5ba3f684f8c0e006f
SHA512 (regex-1.12.2.crate) = c459657944679350369462c3c7686dcdf412597f75bc13c450a131bfceebfe2cd1e1d7f95f0f55b4aa16bfc1acb5c777f344fcfd6a5927aa76b8a2d7aa954d3c
Size (regex-1.12.2.crate) = 163843 bytes
@@ -468,9 +486,9 @@ Size (regex-automata-0.4.13.crate) = 625
BLAKE2s (regex-syntax-0.8.8.crate) = 7228be565c9cb04935590901c900be935484a84b11304833bb726ad1fc59121c
SHA512 (regex-syntax-0.8.8.crate) = 337ca84af81f2c5cd7d213e3ad96a1facba2917f135c4c1ef03571160d24e4ae47186ad07e421a7a4ff0baadbe95d34365e69400f3c36ef39ebeb3e7c14224e4
Size (regex-syntax-0.8.8.crate) = 359141 bytes
-BLAKE2s (reovim-0.7.9.tar.gz) = ad802e89a8e3dd2a3027413b5245ff17745bca8a84830c1d8c4f96a4113bac9a
-SHA512 (reovim-0.7.9.tar.gz) = ef659f6116447c490b09d4e981478e868644e6b0f673fac5b59e69caed739ad3fc78cba3d5ea0e7c9a9e6df5be87d554406eed8ddc56171a03da23c91d0053cc
-Size (reovim-0.7.9.tar.gz) = 719398 bytes
+BLAKE2s (reovim-0.8.1.tar.gz) = 4806e66e9cdf2ea7023e601b66e252b8ccf8532063c8b0bd12cc4981edecec89
+SHA512 (reovim-0.8.1.tar.gz) = 93bd3b0f40fc97692662e11f63ffa96f59da6fb8f1978639be79d263e70a477bd48d65e5e3afcce3f91d5ae7a02a58080643e91328daad041ea50ad839b171ef
+Size (reovim-0.8.1.tar.gz) = 1004705 bytes
BLAKE2s (rustc_version-0.4.1.crate) = f0d198d0457135ca7572b41cd2440f1b0ca075013f53b384d07c00db8c5d2e84
SHA512 (rustc_version-0.4.1.crate) = 7aa8a487ca7411b6d23cae62f7568fa3474a7b1fd1589621071be3428a550ed3b7c4ad68277a8f86849e5900397d7d0e9d678f5d423742a045dc7c660fa6c598
Size (rustc_version-0.4.1.crate) = 12245 bytes
@@ -870,4 +888,4 @@ Size (zune-core-0.4.12.crate) = 17355 by
BLAKE2s (zune-jpeg-0.4.21.crate) = f3bbaa5d70d1efc8c02a3b5d446e3eeab9896bd3d1e3ba619b1bdb8579929eb6
SHA512 (zune-jpeg-0.4.21.crate) = 838ed690fc2d026f40feaaef9c88d85f9a80b186e95f23e5be01c632816942660a89cb0524f2346902fa92235d5de2228485daa67019fcf06ef60ae147b4073c
Size (zune-jpeg-0.4.21.crate) = 68268 bytes
-SHA1 (patch-Cargo.toml) = b9b55de1b29e22139573c3bef7185011d9531c72
+SHA1 (patch-Cargo.toml) = d4e432fb08a5e14b38ed510c7994c10bc0199a68
Index: pkgsrc/editors/reovim/patches/patch-Cargo.toml
diff -u pkgsrc/editors/reovim/patches/patch-Cargo.toml:1.1 pkgsrc/editors/reovim/patches/patch-Cargo.toml:1.2
--- pkgsrc/editors/reovim/patches/patch-Cargo.toml:1.1 Mon Jan 5 18:45:08 2026
+++ pkgsrc/editors/reovim/patches/patch-Cargo.toml Thu Jan 15 18:23:44 2026
@@ -1,15 +1,15 @@
-$NetBSD: patch-Cargo.toml,v 1.1 2026/01/05 18:45:08 pin Exp $
+$NetBSD: patch-Cargo.toml,v 1.2 2026/01/15 18:23:44 pin Exp $
Relax MSRV.
---- Cargo.toml.orig 2026-01-05 06:33:03.436515055 +0000
+--- Cargo.toml.orig 2026-01-15 08:16:16.078473330 +0000
+++ Cargo.toml
-@@ -4,7 +4,7 @@ resolver = "2"
+@@ -29,7 +29,7 @@ resolver = "2"
resolver = "2"
[workspace.package]
-rust-version = "1.92"
-+rust-version = "1.90"
- version = "0.7.9"
++rust-version = "1.91"
+ version = "0.8.1"
edition = "2024"
authors = ["ds1sqe(dukim) <ds1sqe%mensakorea.org@localhost>"]
Home |
Main Index |
Thread Index |
Old Index