From b035e274c04227d707baccea2e4e7e3d3e2e323e Mon Sep 17 00:00:00 2001 From: Daniel Jankowski Date: Wed, 7 Aug 2024 13:43:39 +0200 Subject: [PATCH] feat(tabs): multiple formats for truncation marker --- plugin-dev-workspace.kdl | 4 ++-- src/widgets/tabs.rs | 26 ++++++++++++++------------ 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/plugin-dev-workspace.kdl b/plugin-dev-workspace.kdl index 2facd5d..60a5fc2 100644 --- a/plugin-dev-workspace.kdl +++ b/plugin-dev-workspace.kdl @@ -44,8 +44,8 @@ layout { tab_sync_indicator "S" tab_fullscreen_indicator "FS" tab_display_count "3" - tab_truncate_start_format "#[fg=red,bg=$bg] < +{count} ..." - tab_truncate_end_format "#[fg=red,bg=$bg] ... +{count} >" + tab_truncate_start_format "#[fg=$blue,bg=$bg]#[bg=$blue,fg=black] +{count} ... #[fg=$bg,bg=$blue]" + tab_truncate_end_format "#[fg=red,bg=$bg] ... +{count} > #[bg=$yellow] " command_0_command "echo \"平仮名, ひらがな 📦\"" command_0_clickaction "bash -c \"zellij --session zjstatus-dev pipe 'zjstatus::notify::hello world!' -n zjstatus\"" diff --git a/src/widgets/tabs.rs b/src/widgets/tabs.rs index 46753bf..187075a 100644 --- a/src/widgets/tabs.rs +++ b/src/widgets/tabs.rs @@ -22,8 +22,8 @@ pub struct TabsWidget { floating_indicator: Option, sync_indicator: Option, tab_display_count: Option, - tab_truncate_start_format: Option, - tab_truncate_end_format: Option, + tab_truncate_start_format: Vec, + tab_truncate_end_format: Vec, } impl TabsWidget { @@ -73,11 +73,13 @@ impl TabsWidget { let tab_truncate_start_format = config .get("tab_truncate_start_format") - .map(|form| FormattedPart::from_format_string(form, config)); + .map(|form| FormattedPart::multiple_from_format_string(form, config)) + .unwrap_or_default(); let tab_truncate_end_format = config .get("tab_truncate_end_format") - .map(|form| FormattedPart::from_format_string(form, config)); + .map(|form| FormattedPart::multiple_from_format_string(form, config)) + .unwrap_or_default(); let separator = config .get("tab_separator") @@ -111,14 +113,14 @@ impl Widget for TabsWidget { get_tab_window(&state.tabs, self.tab_display_count); if truncated_start > 0 { - if let Some(f) = &self.tab_truncate_start_format { + for f in &self.tab_truncate_start_format { let mut content = f.content.clone(); if content.contains("{count}") { content = content.replace("{count}", (truncated_start).to_string().as_str()); } - output = format!("{}{output}", f.format_string(&content)); + output = format!("{output}{}", f.format_string(&content)); } } @@ -136,7 +138,7 @@ impl Widget for TabsWidget { } if truncated_end > 0 { - if let Some(f) = &self.tab_truncate_end_format { + for f in &self.tab_truncate_end_format { let mut content = f.content.clone(); if content.contains("{count}") { @@ -166,14 +168,14 @@ impl Widget for TabsWidget { + 1; if truncated_start > 0 { - if let Some(f) = &self.tab_truncate_start_format { + for f in &self.tab_truncate_start_format { let mut content = f.content.clone(); if content.contains("{count}") { content = content.replace("{count}", (truncated_end).to_string().as_str()); } - offset = console::measure_text_width(&f.format_string(&content)); + offset += console::measure_text_width(&f.format_string(&content)); if pos <= offset { switch_tab_to(active_pos.saturating_sub(1) as u32); @@ -205,7 +207,7 @@ impl Widget for TabsWidget { } if truncated_end > 0 { - if let Some(f) = &self.tab_truncate_end_format { + for f in &self.tab_truncate_end_format { let mut content = f.content.clone(); if content.contains("{count}") { @@ -276,7 +278,7 @@ impl TabsWidget { if content.contains("{floating_total_count}") { let panes_for_tab: Vec = - panes.panes.get(&tab.position).cloned().unwrap_or(vec![]); + panes.panes.get(&tab.position).cloned().unwrap_or_default(); content = content.replace( "{floating_total_count}", @@ -318,7 +320,7 @@ impl TabsWidget { if content.contains("{floating_indicator}") && self.floating_indicator.is_some() { let panes_for_tab: Vec = - panes.panes.get(&tab.position).cloned().unwrap_or(vec![]); + panes.panes.get(&tab.position).cloned().unwrap_or_default(); let is_floating = panes_for_tab.iter().any(|p| p.is_floating);