Skip to content

#722: Minimap is one strip for the active pane only (migrates on focus change, reflowing both panes) and its width is a fixed 12 char cells, not a fraction of the view - #725

Merged
JDonaghy merged 2 commits into
developfrom
issue-722-minimap-is-one-strip-for-the-active-pane
Sep 1, 2026
Merged

#722: Minimap is one strip for the active pane only (migrates on focus change, reflowing both panes) and its width is a fixed 12 char cells, not a fraction of the view#725
JDonaghy merged 2 commits into
developfrom
issue-722-minimap-is-one-strip-for-the-active-pane

Conversation

@JDonaghy

@JDonaghy JDonaghy commented Sep 1, 2026

Copy link
Copy Markdown
Owner

Closes #722

Automated PR opened by coordinator for review of issue #722.

JDonaghy and others added 2 commits September 1, 2026 00:18
Two defects in the same build_screen_layout code path, per #722:

A. ScreenLayout.minimap was a single Option<RenderedMinimap> gated on
   the active window, so in a :vsplit only the focused pane got a
   strip and it migrated (reflowing BOTH panes' text) on every focus
   change. It's now Vec<RenderedMinimap>, one per window that has the
   setting on and room to spare; the width reclaim in
   build_screen_layout narrows every window's rect by its own strip's
   width instead of gating on is_active. draw_minimap_strip,
   minimap_click_line and apply_minimap_click all iterate/resolve
   against every pane's strip now, and report which window a click
   landed on rather than assuming it's the active one.

B. minimap_reserved_width used a fixed MINIMAP_COLS=12 multiplied by
   char_width, so the strip stayed a constant width as the window grew
   (shrinking as a fraction of the view) and got WIDER when the editor
   font size increased — backwards versus VS Code, whose minimap width
   is independent of the editor font. Replaced with
   MINIMAP_WIDTH_FRACTION (0.15 of the pane's own width) clamped to
   [MINIMAP_MIN_COLS, MINIMAP_MAX_COLS], with char_width now only
   entering the clamp bounds and the MINIMAP_MIN_TEXT_COLS suppression
   floor, not the primary width.

Also bumps the quadraui pin past #663 (bound minimap row pitch and
clip glyphs to bounds) so that separate quadraui-side minimap fix
actually reaches vimcode instead of sitting merged-but-unreachable.
Six TUI snapshot tests shift a few columns as a direct, expected
consequence (visible in split_panes.snap: both panes now paint their
own braille strip, where before only one, sometimes neither, did).

Adds render.rs tests for per-pane presence, focus-change width
stability, width-vs-pane-width scaling, and width-vs-font-size
invariance; extends the nominimap-reclaim test to the split case.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…rage

Review round 1 fixes:
- minimap_reserved_width's floor/ceiling were still MINIMAP_MIN_COLS/MAX_COLS
  * char_width, so a narrow split pane's *clamped* width doubled when the
  editor font doubled (48px -> 96px @ char_width 8/16) - reintroducing
  defect B inside the clamp band. GTK now clamps to fixed-pixel
  MINIMAP_MIN_PX/MAX_PX instead; TUI's column-based bounds are unaffected
  (char_width == 1.0 there is already font-invariant). Two new tests pin
  the clamped region across two font sizes (floor and ceiling), RED-first
  verified against the reintroduced bug.
- Added driver-tier black-box coverage for the core split-pane symptoms:
  TuiDriver tests painting a live `:vsplit` (two independent braille
  strips) and a live `<C-w>w` focus cycle (neither pane's text moves,
  confirmed via a cursor-cell-relocation sanity check so the test can't
  pass vacuously), plus the GTK twins using GtkDriver + real painted
  pixels/rects. All four RED-first verified against the pre-#722
  is_active-gated single-minimap code.
- Non-blocking finding: apply_minimap_click now focuses the clicked pane
  (focus_group_for_window + set_cursor_for_window, mirroring
  Engine::mouse_click) instead of only scrolling it, since every pane's
  minimap is clickable now. New RED-first test in render.rs.
- Nits: updated the three "active window's" doc-comment call sites of
  draw_minimap_strip to reflect the per-window reality.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@JDonaghy
JDonaghy force-pushed the issue-722-minimap-is-one-strip-for-the-active-pane branch from 3cb7281 to 4f039d6 Compare September 1, 2026 05:22
@JDonaghy
JDonaghy merged commit d0914b8 into develop Sep 1, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant