aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDaniel Jankowski <daniel.jankowski@rub.de>2024-08-07 13:43:39 +0200
committerDaniel Jankowski <daniel.jankowski@rub.de>2024-08-07 13:43:39 +0200
commitb035e274c04227d707baccea2e4e7e3d3e2e323e (patch)
treec8110f845b0883ff1c6a4124e2e00b4ac477856d /src
parentchore: update cargo deps (diff)
downloadsl0pstatus-b035e274c04227d707baccea2e4e7e3d3e2e323e.tar.gz
sl0pstatus-b035e274c04227d707baccea2e4e7e3d3e2e323e.tar.xz
sl0pstatus-b035e274c04227d707baccea2e4e7e3d3e2e323e.zip
feat(tabs): multiple formats for truncation marker
Diffstat (limited to 'src')
-rw-r--r--src/widgets/tabs.rs26
1 files changed, 14 insertions, 12 deletions
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<String>,
sync_indicator: Option<String>,
tab_display_count: Option<usize>,
- tab_truncate_start_format: Option<FormattedPart>,
- tab_truncate_end_format: Option<FormattedPart>,
+ tab_truncate_start_format: Vec<FormattedPart>,
+ tab_truncate_end_format: Vec<FormattedPart>,
}
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<PaneInfo> =
- 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<PaneInfo> =
- 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);