diff options
| author | Igor Soarez <igor@soarez.org> | 2026-10-05 15:45:17 +0300 |
|---|---|---|
| committer | Igor Soarez <igor@soarez.org> | 2026-10-05 15:45:17 +0300 |
| commit | 9a12d7fb0eae23c016d3e941a16765084fbf0eaa (patch) | |
| tree | 1ad3a3584fffdf6ed317b766ffb99684a1465510 /src/config | |
| parent | 10fb1ab5ac9091e59957e97c3e75ea6bc288b8c5 (diff) | |
tmuxrdr: tmux's status line as the tab row (ui.tab_style = "tmux")
herdr draws each tab as a centred, padded block, and a named tab shows its
name without its number. With ui.tab_style = "tmux" the row is tmux 3.7c's
default status line: "[session] " cut to status-left-length 10, then each
window as "#I:#W#{?window_flags,#{window_flags}, }" -- current "*", last
"-", zoomed "Z" -- one space apart, plain text in the status line's colours.
Unnamed tabs are called after their active pane's directory, like
automatic-rename-format '#{b:pane_current_path}'.
The logic is in src/client/shell/tabs_tmux.rs; render_tab_bar keeps its
layout, scrolling, mouse hits and + button, with three one-line hooks for
width, text and style, and the session at the left. Each tab's active pane
and each workspace's previous tab are remembered by the client, so nothing
changes in the protocol and the client works against a stock herdr server.
The default, herdr, draws as before.
Diffstat (limited to 'src/config')
| -rw-r--r-- | src/config/model.rs | 3 | ||||
| -rw-r--r-- | src/config/tmuxrdr.rs | 16 |
2 files changed, 19 insertions, 0 deletions
diff --git a/src/config/model.rs b/src/config/model.rs index 0e2e57ce..69ba27ca 100644 --- a/src/config/model.rs +++ b/src/config/model.rs @@ -984,6 +984,8 @@ pub struct UiConfig { pub hide_tab_bar_when_single_tab: bool, /// Desktop tab row placement. Default: top. pub tab_bar_position: TabBarPositionConfig, + /// tmuxrdr: how the tab row draws its tabs. Default: herdr. + pub tab_style: super::TabStyleConfig, /// Ordered entries shown at the right edge of the desktop tab row. Empty by default. pub tab_bar_right: Vec<TabBarRightEntryConfig>, /// Text inserted between visible right-side tab bar entries. Default: one space. @@ -1217,6 +1219,7 @@ impl Default for UiConfig { show_agent_labels_on_pane_borders: false, hide_tab_bar_when_single_tab: false, tab_bar_position: TabBarPositionConfig::Top, + tab_style: Default::default(), tab_bar_right: Vec::new(), tab_bar_right_separator: " ".into(), window_title: super::window_title::default_window_title(), diff --git a/src/config/tmuxrdr.rs b/src/config/tmuxrdr.rs new file mode 100644 index 00000000..3cd36642 --- /dev/null +++ b/src/config/tmuxrdr.rs @@ -0,0 +1,16 @@ +//! tmuxrdr's own config options. In a file of their own, so the patch to +//! herdr's config model stays a field and its default. + +use serde::{Deserialize, Serialize}; + +/// How the tab row draws its tabs: `ui.tab_style`. +#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Serialize, Default)] +#[serde(rename_all = "snake_case")] +pub enum TabStyleConfig { + /// herdr's: centred, padded blocks; a named tab shows its name only. + #[default] + Herdr, + /// tmux's status line: `[session] 1:name* 2:name-`, plain text, one space + /// apart -- src/client/shell/tabs_tmux.rs. + Tmux, +} |
