Skip to content

Move the profile switcher into the status line#52

Merged
Tannex merged 3 commits into
mainfrom
profile-tabs-in-status-line
Jul 20, 2026
Merged

Move the profile switcher into the status line#52
Tannex merged 3 commits into
mainfrom
profile-tabs-in-status-line

Conversation

@Tannex

@Tannex Tannex commented Jul 19, 2026

Copy link
Copy Markdown
Owner

Closes #45. Closes #38.

The profile tab strip occupied the whole first row and made every layout computation conditional on the profile count — which is exactly what broke in #38 (handleProfileList added the tab bar without recomputing visible/budget, hiding the help line and skewing the row budget by one).

Instead of patching the recompute, this deletes the row:

Verified with unit tests (updated: TestMultiProfileViewUsesNoExtraRow asserts multi-profile geometry equals VisibleRows) plus terminal runs: --demo capture shows the strip bottom-right with the help line back on screen, and a two-profile z/OSMF fixture run confirms both profiles' list requests use the exact 2× budget for the reclaimed geometry (max-items=48 at 120×30) and record reads stay in framed record mode (record-range=0,48).

🤖 Generated with Claude Code

https://claude.ai/code/session_01CS2LZMn2YJdebAiry2jzdP

The profile tab strip spent a full terminal row on information that
rarely changes, and its extra chrome row made every layout computation
conditional on the profile count — the source of the multi-profile
off-by-one where the help line was pushed off-screen and the row budget
was derived from a tabless height.

The profiles now render at the bottom right of the status line (active
highlighted, others dimmed, unloaded marked with a dot, same switch
keys), the title-line chip stays only for single-profile sessions, and
MinTerminalHeight/VisibleRows lose their tabBar parameter entirely, so
multi- and single-profile sessions share one geometry.

Closes #45
Closes #38

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CS2LZMn2YJdebAiry2jzdP
Tannex and others added 2 commits July 20, 2026 06:18
The profile strip rendered every profile unbounded, and statusLine
dropped the whole right side when it did not fit — with the title chip
also suppressed in multi-profile mode, realistic profile sets on a
52-80 column terminal lost every indication of the active profile.
profileStrip now takes a width budget: the active profile always
renders, neighbors are added while they fit, and an ellipsis stands in
for whatever is dropped from either end, mirroring the old tab bar's
narrow-terminal behavior. statusLine computes the strip after its
narrow-width early-out (no more discarded renders below 40 columns)
and budgets it against the position text plus a minimum status-text
allowance. Regression test replaces the coverage deleted with the tab
bar; a stale tab-bar comment in the demo profile loader is updated.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CS2LZMn2YJdebAiry2jzdP
@Tannex
Tannex merged commit e983920 into main Jul 20, 2026
@Tannex
Tannex deleted the profile-tabs-in-status-line branch July 20, 2026 06:13
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