diff options
| author | Daniel Jankowski <daniel.jankowski@rub.de> | 2024-02-04 11:02:50 +0100 |
|---|---|---|
| committer | Daniel Jankowski <daniel.jankowski@rub.de> | 2024-02-04 11:02:50 +0100 |
| commit | 40320401edc92a84f7e6e97fb24ad4c95c142b85 (patch) | |
| tree | 98e816841c97fe0550cf5e35f1c0ccae70b7eeb3 /src/widgets/tabs.rs | |
| parent | chore: update cargo deps (diff) | |
| download | sl0pstatus-40320401edc92a84f7e6e97fb24ad4c95c142b85.tar.gz sl0pstatus-40320401edc92a84f7e6e97fb24ad4c95c142b85.tar.xz sl0pstatus-40320401edc92a84f7e6e97fb24ad4c95c142b85.zip | |
feat: add separator for tabs
fixes #35
Diffstat (limited to 'src/widgets/tabs.rs')
| -rw-r--r-- | src/widgets/tabs.rs | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/src/widgets/tabs.rs b/src/widgets/tabs.rs index e7281ce..5e36378 100644 --- a/src/widgets/tabs.rs +++ b/src/widgets/tabs.rs @@ -13,6 +13,7 @@ pub struct TabsWidget { normal_tab_format: Vec<FormattedPart>, normal_tab_fullscreen_format: Vec<FormattedPart>, normal_tab_sync_format: Vec<FormattedPart>, + separator: Option<FormattedPart>, } impl TabsWidget { @@ -47,6 +48,10 @@ impl TabsWidget { None => active_tab_format.clone(), }; + let separator = config + .get("tab_separator") + .map(|s| FormattedPart::from_format_string(s)); + Self { normal_tab_format, normal_tab_fullscreen_format, @@ -54,6 +59,7 @@ impl TabsWidget { active_tab_format, active_tab_fullscreen_format, active_tab_sync_format, + separator, } } } @@ -61,11 +67,19 @@ impl TabsWidget { impl Widget for TabsWidget { fn process(&self, _name: &str, state: &ZellijState) -> String { let mut output = "".to_owned(); + let mut counter = 0; for tab in &state.tabs { let content = self.render_tab(tab); + counter += 1; output = format!("{}{}", output, content); + + if counter < state.tabs.len() { + if let Some(sep) = &self.separator { + output = format!("{}{}", output, sep.format_string(&sep.content)); + } + } } output @@ -76,8 +90,20 @@ impl Widget for TabsWidget { let mut offset = 0; let mut index = 1; + let mut counter = 0; for tab in &state.tabs { - let content = strip_ansi_escapes::strip_str(self.render_tab(tab)); + counter += 1; + + let mut rendered_content = self.render_tab(tab); + + if counter < state.tabs.len() { + if let Some(sep) = &self.separator { + rendered_content = + format!("{}{}", rendered_content, sep.format_string(&sep.content)); + } + } + + let content = strip_ansi_escapes::strip_str(rendered_content); if pos > offset && pos < offset + content.chars().count() { switch_tab_to(index); |
