From e48d83067a5a9b05dfd0a82761068866ab2d294d Mon Sep 17 00:00:00 2001 From: Can Celik Date: Mon, 10 Aug 2026 01:20:09 +0300 Subject: feat: add configurable tab bar status (#2586) * feat: show a zoom indicator in the desktop tab bar Reserve the right edge of the tab row for a ZOOM pill while the focused pane is zoomed, matching the accent style of the mode bars. The per-tab Z suffix stays; the pill makes the zoomed state visible at a glance like tmux's status-right flag. * feat: optionally show the hostname in the desktop tab bar Add ui.tab_bar_hostname to display the machine's hostname at the right edge of the tab row, like tmux's #h in status-right. The value resolves where the server renders, so remote sessions show the remote host. Off by default. * fix: strip control characters from the tab bar hostname * fix: hide the hostname when it would squeeze out the tab strip * feat: add configurable tab bar status * fix: harden tab bar status updates * fix: terminate tab bar status process trees * fix: disable status commands on unsupported platforms * fix: skip unchanged status command renders * fix: keep tab bar status opt-in by default --------- Co-authored-by: David Heinemeier Hansson --- src/app/state.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src/app/state.rs') diff --git a/src/app/state.rs b/src/app/state.rs index e460f62b..cbecef00 100644 --- a/src/app/state.rs +++ b/src/app/state.rs @@ -1317,6 +1317,12 @@ pub(crate) struct PaneFocusTarget { /// All application state — pure data, no channels or async runtime. /// Testable without PTYs or a tokio runtime. +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum TabBarStatusSegment { + Zoom, + Text(Option), +} + pub struct AppState { pub terminals: std::collections::HashMap, @@ -1432,6 +1438,8 @@ pub struct AppState { pub show_agent_labels_on_pane_borders: bool, pub hide_tab_bar_when_single_tab: bool, pub tab_bar_position: TabBarPositionConfig, + pub tab_bar_right: Vec, + pub tab_bar_right_separator: String, pub pane_history_persistence: bool, /// Expose the focused pane's cursor anchor to the outer terminal even when /// the pane requested `?25l`. See `[experimental] reveal_hidden_cursor_for_cjk_ime`. @@ -1798,6 +1806,8 @@ impl AppState { show_agent_labels_on_pane_borders: false, hide_tab_bar_when_single_tab: false, tab_bar_position: TabBarPositionConfig::Top, + tab_bar_right: Vec::new(), + tab_bar_right_separator: " ".into(), pane_history_persistence: false, reveal_hidden_cursor_for_cjk_ime: false, cjk_ime_agent_filter_configured: false, -- cgit v1.2.3