You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Retire four pieces of vimcode that duplicate logic quadraui already ships. No behaviour change
in any of them.
Why now
These predate the current tab/split work — quadraui grew the generic version and vimcode was never
migrated. They surfaced while auditing what coord-tui should and should not copy from vimcode
(2026-08-15), and the audit's conclusion is worth recording: coord-tui will consume the quadraui
versions, so every day vimcode keeps its own is a day the two apps can diverge on identical
functionality.
Two of these are load-bearing rather than cosmetic. fit_active_scroll_offset's own doc comment
says backends MUST use it instead of the engine algorithm, because a per-tab width estimate that
mismatches actual rendering leaves the active tab off-screen — exactly the class of bug quadraui #554 was.
core/window.rs's split tree — its own SplitDirection, ratio, set_ratio_at_index, divider geometry
quadraui::SplitTree
The third is already labelled as temporary in vimcode's own source
(src/render.rs:494): the shim exists "Until TUI / GTK / Win-GUI migrate to consume TabBarLayout
directly". This issue is that migration.
⚠ SplitDirection is inverted between the two crates. vimcode's Horizontal means split
top/bottom (core/window.rs:9-13); quadraui's Horizontal means panes side-by-side, first =
left (primitives/split.rs:40-49). A mechanical swap will silently rotate every split by 90°, and
it compiles. Convert deliberately, and assert orientation on a rendered grid rather than on the
enum name.
Sequence them as four separate commits — or four separate PRs — so a regression is bisectable to
one replacement.
Acceptance criteria
None of the four duplicates remain in src/.
The active tab is still scrolled into view after switching to an off-screen tab.
What
Retire four pieces of vimcode that duplicate logic quadraui already ships. No behaviour change
in any of them.
Why now
These predate the current tab/split work — quadraui grew the generic version and vimcode was never
migrated. They surfaced while auditing what coord-tui should and should not copy from vimcode
(2026-08-15), and the audit's conclusion is worth recording: coord-tui will consume the quadraui
versions, so every day vimcode keeps its own is a day the two apps can diverge on identical
functionality.
Two of these are load-bearing rather than cosmetic.
fit_active_scroll_offset's own doc commentsays backends MUST use it instead of the engine algorithm, because a per-tab width estimate that
mismatches actual rendering leaves the active tab off-screen — exactly the class of bug quadraui
#554 was.
Design
Engine::ensure_active_tab_visible(engine/windows.rs:1817)TabBar::fit_active_scroll_offset(primitives/tab_bar.rs:180)tab_display_width/tabs_fitting_fromTabMeasure+TabBar::layoutTabBarHitRegion/TabBarClickTarget(engine/mod.rs:1182-1209)TabBarLayout.hit_regions+TabBarHitcore/window.rs's split tree — its ownSplitDirection,ratio,set_ratio_at_index, divider geometryquadraui::SplitTreeThe third is already labelled as temporary in vimcode's own source
(
src/render.rs:494): the shim exists "Until TUI / GTK / Win-GUI migrate to consumeTabBarLayoutdirectly". This issue is that migration.
⚠
SplitDirectionis inverted between the two crates. vimcode'sHorizontalmeans splittop/bottom (
core/window.rs:9-13); quadraui'sHorizontalmeans panes side-by-side, first =left (
primitives/split.rs:40-49). A mechanical swap will silently rotate every split by 90°, andit compiles. Convert deliberately, and assert orientation on a rendered grid rather than on the
enum name.
Sequence them as four separate commits — or four separate PRs — so a regression is bisectable to
one replacement.
Acceptance criteria
src/.cargo build && cargo testEXIT=0 after each step.Files
src/core/engine/windows.rssrc/core/engine/mod.rssrc/core/window.rssrc/render.rssrc/tui_main/render_impl.rssrc/gtk/click.rsOut of scope