Skip to content

v0.3.8 — context menus, LSP fixes, subprocess audit - #11

Merged
JDonaghy merged 6 commits into
mainfrom
develop
Mar 17, 2026
Merged

v0.3.8 — context menus, LSP fixes, subprocess audit#11
JDonaghy merged 6 commits into
mainfrom
develop

Conversation

@JDonaghy

Copy link
Copy Markdown
Owner

Summary

  • Context menus: Centralized engine-driven context menus for explorer, tab bar, and editor (9-item right-click menu with mode-aware shortcuts)
  • Tab context menu: Fixed GTK/TUI split inconsistency, added 4 group split options
  • LSP fixes: Fixed gd/gi/gy appearing to hang (message persisted after jump); string ID fallback; unwrap_or on empty responses
  • Kitty keyboard: shift_map_us() translates base key + SHIFT modifier to correct shifted character
  • Subprocess stderr audit: Audited ~50 Command::new() sites; fixed registry.rs curl inheriting stderr (TUI corruption risk)
  • Vim compatibility: [#/]#, gR, g+/g-, q:/q?
  • Docs: Nerd Font requirement note

Test plan

  • cargo fmt — clean
  • cargo clippy -- -D warnings — zero warnings
  • cargo test — 4511 tests pass
  • cargo build — compiles

🤖 Generated with Claude Code

JDonaghy and others added 6 commits March 15, 2026 13:17
Implement 4 missing Vim commands to reach 414/417 (99%) compatibility:
- [#/]# preprocessor directive navigation with depth tracking
- gR virtual replace mode (tab expansion to spaces)
- g+/g- chronological undo timeline navigation
- q:/q//q? command-line and search history window

31 new tests (4422 total)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Explorer context menu with different items for files vs folders (Open to
Side, Rename, Delete, Copy Path, etc.). Tab bar context menu (Close,
Close Others, Close to Right, Close Saved, Split Right/Down, etc.).
Engine data model with ContextMenuState/ContextMenuTarget. GTK native
PopoverMenu with gio::Menu sections and SimpleActionGroup actions. TUI
overlay with box-drawing borders and mouse hover highlighting. GLib log
handler suppresses non-fatal gtk_css_node_insert_after assertion.
38 new tests (4460 total).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ns, update extensions icon

Fix GTK/TUI split behavior mismatch: "Split Right/Down" now consistently
creates Vim window splits in both backends. Add "Split Right/Down to New
Group" for VSCode-style editor group splits. Update extensions activity
bar icon to nf-cod-extensions (U+EAE6) for proper rendering.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sessions 188-191: centralized context menus (engine-driven for GTK+TUI),
VSCode-style editor right-click menu (9 items, mode-aware shortcuts),
LSP go-to-definition fix (message not cleared after jump), Kitty keyboard
shift_map_us() fix, LSP response robustness (string ID fallback), and
subprocess stderr safety audit (fixed registry.rs curl inheriting stderr).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@JDonaghy
JDonaghy merged commit 2febe0c into main Mar 17, 2026
4 checks passed
JDonaghy added a commit that referenced this pull request Jul 31, 2026
…biguity

Six render snapshot tests (snapshot_normal_mode, snapshot_insert_mode,
snapshot_visual_selection, snapshot_command_line, snapshot_split_panes,
snapshot_line_numbers) passed locally but failed in CI on identical source,
off by one column around nerd-font glyphs.

Investigation ruled out both candidate root causes empirically, not just by
inspection:
- Toolchain skew: installed rustc 1.97.1 (CI's exact build, 8bab26f4f
  2026-07-14) locally and ran the literal CI commands (`cargo test
  --verbose`, default features including `gui`) — all 6 pass, byte-identical
  to the 1.95.0 baseline.
- unicode-width version drift: force-resolved unicode-width down to 0.2.0
  (the floor allowed by the vendored vt100 patch) via `cargo update
  --precise` — output is byte-identical to the locked 0.2.2. Verified
  directly that `UnicodeWidthChar::width()` returns `Some(1)` for the
  specific Nerd Font PUA codepoints in both versions.
- Confirmed vimcode source is bit-identical between this branch and the
  actual failing CI run: the issue-613 branch that ran CI is this exact
  commit plus only workflow-file and Cargo.toml-comment changes (verified
  via `git diff`).

Given both mechanisms are ruled out, and quadraui's own `cell_width()` doc
comment already documents that these exact codepoints (Nerd Font
Supplement PUA) fall into Unicode's "Ambiguous" East Asian Width category —
which by UAX #11 permits either 1- or 2-column rendering — the columns
around these glyphs are not something the rendering code can guarantee
across otherwise-compatible builds. Asserting exact padding there tests the
environment, not the renderer.

Rewrite the snapshot assertions per the issue's second sanctioned outcome:
collapse whitespace runs only on rows that actually contain a PUA glyph
before snapshotting, so the tests assert on content and ordering rather
than the exact column count separating them. Rows without nerd-font glyphs
(editor content, gutters, dividers) are untouched and still asserted
byte-for-byte.

Pre-existing, unrelated: `cargo clippy -- -D warnings` currently fails
repo-wide on ~90 snake_case naming violations in test files (e.g.
tests/new_vim_features.rs, tests/nvim_conformance.rs,
src/core/engine/tests.rs) that predate this change and are out of scope
for #615.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
JDonaghy added a commit that referenced this pull request Jul 31, 2026
…biguity

Six render snapshot tests (snapshot_normal_mode, snapshot_insert_mode,
snapshot_visual_selection, snapshot_command_line, snapshot_split_panes,
snapshot_line_numbers) passed locally but failed in CI on identical source,
off by one column around nerd-font glyphs.

Investigation ruled out both candidate root causes empirically, not just by
inspection:
- Toolchain skew: installed rustc 1.97.1 (CI's exact build, 8bab26f4f
  2026-07-14) locally and ran the literal CI commands (`cargo test
  --verbose`, default features including `gui`) — all 6 pass, byte-identical
  to the 1.95.0 baseline.
- unicode-width version drift: force-resolved unicode-width down to 0.2.0
  (the floor allowed by the vendored vt100 patch) via `cargo update
  --precise` — output is byte-identical to the locked 0.2.2. Verified
  directly that `UnicodeWidthChar::width()` returns `Some(1)` for the
  specific Nerd Font PUA codepoints in both versions.
- Confirmed vimcode source is bit-identical between this branch and the
  actual failing CI run: the issue-613 branch that ran CI is this exact
  commit plus only workflow-file and Cargo.toml-comment changes (verified
  via `git diff`).

Given both mechanisms are ruled out, and quadraui's own `cell_width()` doc
comment already documents that these exact codepoints (Nerd Font
Supplement PUA) fall into Unicode's "Ambiguous" East Asian Width category —
which by UAX #11 permits either 1- or 2-column rendering — the columns
around these glyphs are not something the rendering code can guarantee
across otherwise-compatible builds. Asserting exact padding there tests the
environment, not the renderer.

Rewrite the snapshot assertions per the issue's second sanctioned outcome:
collapse whitespace runs only on rows that actually contain a PUA glyph
before snapshotting, so the tests assert on content and ordering rather
than the exact column count separating them. Rows without nerd-font glyphs
(editor content, gutters, dividers) are untouched and still asserted
byte-for-byte.

Pre-existing, unrelated: `cargo clippy -- -D warnings` currently fails
repo-wide on ~90 snake_case naming violations in test files (e.g.
tests/new_vim_features.rs, tests/nvim_conformance.rs,
src/core/engine/tests.rs) that predate this change and are out of scope
for #615.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant