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 --- scripts/test_config_reference_check.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'scripts/test_config_reference_check.py') diff --git a/scripts/test_config_reference_check.py b/scripts/test_config_reference_check.py index 317aae8a..b5a804b1 100644 --- a/scripts/test_config_reference_check.py +++ b/scripts/test_config_reference_check.py @@ -32,6 +32,8 @@ pub struct UiConfig { pub sidebar_width: u16, /// Host cursor policy. Default: auto. pub host_cursor: HostCursorModeConfig, + /// Tab bar status entries. + pub tab_bar_right: Vec, #[serde(rename = "accent_color")] pub accent: String, #[serde(skip)] @@ -63,6 +65,19 @@ pub enum HostCursorModeConfig { Drawn, } +#[derive(Debug, Deserialize)] +#[serde(tag = "type", rename_all = "snake_case")] +pub enum TabBarRightEntryConfig { + Hostname, + Datetime { + format: String, + }, + Command { + command: String, + interval_seconds: u64, + }, +} + #[derive(Debug, Deserialize)] #[serde(untagged)] pub enum BindingConfig { @@ -129,6 +144,10 @@ class CollectKeysTests(unittest.TestCase): self.assertEqual( entries["ui.host_cursor"]["values"], ["auto", "native-cursor", "drawn"] ) + self.assertEqual( + entries["ui.tab_bar_right"]["values"], + ["hostname", "datetime", "command"], + ) self.assertNotIn("values", entries["keys.zoom"]) -- cgit v1.2.3