Render one symbol per Claude pane within each tab#6
Open
anateus wants to merge 3 commits intoishefi:mainfrom
Open
Render one symbol per Claude pane within each tab#6anateus wants to merge 3 commits intoishefi:mainfrom
anateus wants to merge 3 commits intoishefi:mainfrom
Conversation
Tabs with multiple Claude panes previously flickered between activity states because the renderer picked one "best" session per tab. Now every pane gets its own symbol slot, ordered by pane_id so the layout is stable as activity changes. Each symbol is its own click target that focuses that pane; the tab name still switches tabs. Waiting flashes are scoped to the affected symbol instead of the whole tab. Drops the elapsed-time setting (ambiguous which pane it'd refer to) and refactors ClickRegion to a ClickAction enum.
- render_tabs: replace the +3 fit guard with one based on per_tab_fixed so wide tabs (many panes) can no longer overflow into the next tab or register click regions for off-screen cells. Reserve the closing arrow column. Also gate name rendering on remaining space so a long name can't push past cols when symbols already filled the budget. - Tighten symbol click regions to the symbol cell only; the separator space between symbols is now an unclaimed gap rather than bleeding into the previous pane's target. - merge_sessions: compare last_ts_ms when either side has it, falling back to last_event_ts only for old payloads. Per-pane rendering made same-second drops user-visible. - README: drop elapsed-time mentions, replace the now-stale "smart pane focus" line with the per-symbol click description, and document the mode-indicator setting that replaced elapsed-time in the menu.
Wide symbols (⚡ ⚙ ▶ ⚠ render as 2 cols in most terminals) used to make the tab width flicker as activity transitioned between wide and narrow glyphs. Each symbol now occupies a fixed 2-col cell: wide ones fill it natively, narrow ones get a 1-col trailing pad. Tab width is constant regardless of which mix of activities is active. Trade-off is a 1-col gap variance between adjacent symbols (wide-then-X has a 1-col gap, narrow-then-X has 2). Acceptable in exchange for no flicker, and click targets are now uniformly 2 cols. Bump to 0.5.1.
Author
|
With multiple panes displaying all the elapsed times is a bit cumbersome so I decided to drop it, but obviously that's easy to adjust/revert. Just wanted to mention that it was intentional :) |
Owner
|
Thanks for this, it's the more complete take. Fixed-width symbol cells, per-symbol click regions via the new
Otherwise lgtm. The README + version bump + addressed review feedback make this the cleaner base to land. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Tabs with multiple Claude panes used to flicker between activity states because the renderer picked one "best" session per tab. Each pane now gets its own symbol slot.
Per-pane symbols
pane_idso the layout doesn't reshuffle as activity changes.(cols − fixed) / count, capped at 20. Names truncate when tight, drop when very tight; symbols stay visible.Settings
elapsed_timesetting (ambiguous which pane it'd refer to with multi-pane). Existing configs with the field still parse — serde ignores unknown keys.Reliability fixes (review feedback)
render_tabsoverflow guard now uses the actual per-tab fixed width and reserves the closing-arrow column. Wide tabs can no longer overflow into the next tab or register click regions for off-screen cells.merge_sessionscompareslast_ts_mswhen either side has it, falling back tolast_event_tsonly for old payloads. Per-pane rendering made same-second drops user-visible.Plumbing
ClickRegionrefactored from(tab_index, pane_id, is_waiting)to aClickAction { FocusPane | SwitchTab }enum.Test plan
wasm32-wasip1(release + clippy)