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
{{ message }}
Repository navigation
[FEATURE]: tui: session tab title marquee is too fast to read — make it configurable #58054
Expose the session tab title marquee in cli.json so it can be slowed down or turned off.
When a tab title is wider than the tab, hovering the tab starts a scrolling marquee. The timing is hardcoded in 2.1.2: a 600 ms hover delay, then one cell every 80 ms (~12.5 chars/s), looping forever by repeating title + " · ". At that speed long titles are hard to read, and it triggers easily just by moving the mouse across the tab strip.
The text never pauses, so each part has already scrolled out of view before it can be read. The marquee is meant to help identify a long title, but at 80 ms per character it is effectively unreadable — I have to hover the tab several times just to piece the title together.
Proposed config
{
"tabs": {
"marquee": {
"enabled": true, // false = always truncate, never scroll"delay": 600, // ms before scrolling starts"speed": 80// ms per character
}
}
}
Fewer knobs would also be fine, e.g. tabs.marquee: "off" | "slow" | "normal".
Current behavior
tabs only accepts mode, enabled, scope, layout, indicators — nothing for the marquee.
animations: false does not stop it (it only disables the fade).
scroll.speed is unrelated (wheel/keyboard scroll distance).
The only workarounds are renaming sessions, widening the terminal, or tabs.mode: "off".
Thanks for the detailed request! To sum it up: you'd like the session tab title marquee to be configurable in cli.json. That means being able to turn it off, set the hover delay and set the scroll speed, or pick a simple preset like off / slow / normal. In 2.1.2 the timing is fixed (600 ms delay, then 80 ms per character), and animations: false only turns off the fade, so there's no way to change it today.
One small correction: since #43936 the marquee scrolls through the title once and then resets, rather than looping forever. It still never pauses, though, so your point about readability stands.
I’d take the preset option for a small first change:
{ "tabs": { "marquee": "slow" } }
normal (default): retain the current 600 ms hover delay and 80 ms per cell.
slow: propose 1200 ms before starting and 160 ms per cell, reducing accidental starts and halving the movement rate.
off: keep titles truncated without starting marquee timers; retain normal tab hover/click behavior.
In current dev, both horizontal and vertical tabs use the same createTabMarquee / createMarquee helpers. I’d pass the resolved preset through those helpers, retain the existing one-pass-and-reset behavior, and leave animations controlling the fade. A config reload would cancel any pending/running scroll and reset its offset before applying the new preset.
The change would cover the tabs schema/default resolution and CLI config docs. Validation would extend the existing marquee fake-timer tests for default/slow timing, no scrolling with off, reload/leave/disposal cleanup, and the existing overflow/one-pass behavior, plus check both tab layouts and wide-character titles.
This is a source-based proposal; I haven’t changed code or run these checks. Could a maintainer approve this preset interface and the proposed slow timing before I implement it?
It follows the preset interface discussed above — tabs.marquee in cli.json, with normal (600 ms before the first cell, 80 ms per cell; unchanged default), slow (1200 ms / 160 ms) and off (titles stay truncated and no marquee timers start).
Both the horizontal strip and the vertical rail pass the resolved preset into the existing createMarquee / createTabMarquee helpers, so the one-pass-and-reset motion is unchanged and animations still only controls the fade. The preset is read reactively, so a config reload cancels a pending or running scroll and resets the offset before the new preset applies.
Activity
opencode-agent commentedon Oct 22, 2026
Thanks for the detailed request! To sum it up: you'd like the session tab title marquee to be configurable in
cli.json. That means being able to turn it off, set the hover delay and set the scroll speed, or pick a simple preset likeoff/slow/normal. In 2.1.2 the timing is fixed (600 ms delay, then 80 ms per character), andanimations: falseonly turns off the fade, so there's no way to change it today.One small correction: since #43936 the marquee scrolls through the title once and then resets, rather than looping forever. It still never pauses, though, so your point about readability stands.
Related issues:
This can't be done with a plugin right now, because plugins can't reach the tab bar's rendering. Maintainers will consider the request.
Dante-dan commentedon Oct 22, 2026
I’d take the preset option for a small first change:
{ "tabs": { "marquee": "slow" } }normal(default): retain the current 600 ms hover delay and 80 ms per cell.slow: propose 1200 ms before starting and 160 ms per cell, reducing accidental starts and halving the movement rate.off: keep titles truncated without starting marquee timers; retain normal tab hover/click behavior.In current
dev, both horizontal and vertical tabs use the samecreateTabMarquee/createMarqueehelpers. I’d pass the resolved preset through those helpers, retain the existing one-pass-and-reset behavior, and leaveanimationscontrolling the fade. A config reload would cancel any pending/running scroll and reset its offset before applying the new preset.The change would cover the
tabsschema/default resolution and CLI config docs. Validation would extend the existing marquee fake-timer tests for default/slow timing, no scrolling withoff, reload/leave/disposal cleanup, and the existing overflow/one-pass behavior, plus check both tab layouts and wide-character titles.This is a source-based proposal; I haven’t changed code or run these checks. Could a maintainer approve this preset interface and the proposed slow timing before I implement it?
xzyangha commentedon Oct 22, 2026
Implemented and opened a PR: #58061.
It follows the preset interface discussed above —
tabs.marqueeincli.json, withnormal(600 ms before the first cell, 80 ms per cell; unchanged default),slow(1200 ms / 160 ms) andoff(titles stay truncated and no marquee timers start).Both the horizontal strip and the vertical rail pass the resolved preset into the existing
createMarquee/createTabMarqueehelpers, so the one-pass-and-reset motion is unchanged andanimationsstill only controls the fade. The preset is read reactively, so a config reload cancels a pending or running scroll and resets the offset before the new preset applies.