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 | |
| 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
| -rw-r--r-- | README.md | 3 | ||||
| -rw-r--r-- | plugin-dev-workspace.kdl | 2 | ||||
| -rw-r--r-- | src/widgets/tabs.rs | 28 |
3 files changed, 31 insertions, 2 deletions
@@ -282,6 +282,9 @@ tab_normal_sync "#[fg=#6C7086] {index} :: {name} <> " tab_active "#[fg=#9399B2,bold,italic] {name} " tab_active_fullscreen "#[fg=#9399B2,bold,italic] {name} [] " tab_active_sync "#[fg=#9399B2,bold,italic] {name} <> " + +# separator between the tabs +tab_separator "#[fg=#6C7086,bg=#181825] | " ``` ## 🚧 Development diff --git a/plugin-dev-workspace.kdl b/plugin-dev-workspace.kdl index 0be2f3c..9ac75ff 100644 --- a/plugin-dev-workspace.kdl +++ b/plugin-dev-workspace.kdl @@ -26,7 +26,7 @@ layout { tab_active "#[fg=#9399B2,bg=#181825,bold,italic] {index} {name} " tab_active_fullscreen "#[fg=#9399B2,bg=#181825,bold,italic] {index} {name} [] " tab_active_sync "#[fg=#9399B2,bg=#181825,bold,italic] {index} {name} <> " - + tab_separator "#[fg=#6C7086,bg=#181825] | " command_1_command "date" command_1_format "#[fg=blue,bg=black] {exit_code} {stdout} " 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); |
