aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDaniel Jankowski <daniel.jankowski@rub.de>2024-02-23 09:46:10 +0100
committerDaniel Jankowski <daniel.jankowski@rub.de>2024-02-23 09:46:10 +0100
commit600dd593669907778fd2e95a5c4ea4ce211b1a43 (patch)
treef97ce35554291111427f168274dbd98ffb425fbc /src
parentchore: update cargo deps (diff)
downloadsl0pstatus-600dd593669907778fd2e95a5c4ea4ce211b1a43.tar.gz
sl0pstatus-600dd593669907778fd2e95a5c4ea4ce211b1a43.tar.xz
sl0pstatus-600dd593669907778fd2e95a5c4ea4ce211b1a43.zip
feat(tabs): add configurable indicators for sync, fullscreen & floating
Diffstat (limited to 'src')
-rw-r--r--src/widgets/tabs.rs51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/widgets/tabs.rs b/src/widgets/tabs.rs
index 3cfdfbf..c1e7d13 100644
--- a/src/widgets/tabs.rs
+++ b/src/widgets/tabs.rs
@@ -17,6 +17,9 @@ pub struct TabsWidget {
normal_tab_fullscreen_format: Vec<FormattedPart>,
normal_tab_sync_format: Vec<FormattedPart>,
separator: Option<FormattedPart>,
+ fullscreen_indicator: Option<String>,
+ floating_indicator: Option<String>,
+ sync_indicator: Option<String>,
}
impl TabsWidget {
@@ -63,6 +66,9 @@ impl TabsWidget {
active_tab_fullscreen_format,
active_tab_sync_format,
separator,
+ floating_indicator: config.get("tab_floating_indicator").cloned(),
+ sync_indicator: config.get("tab_sync_indicator").cloned(),
+ fullscreen_indicator: config.get("tab_fullscreen_indicator").cloned(),
}
}
}
@@ -168,9 +174,54 @@ impl TabsWidget {
);
}
+ content = self.replace_indicators(content, tab, panes);
+
output = format!("{}{}", output, f.format_string(&content));
}
output.to_owned()
}
+
+ fn replace_indicators(&self, content: String, tab: &TabInfo, panes: &PaneManifest) -> String {
+ let mut content = content;
+ if content.contains("{fullscreen_indicator}") && self.fullscreen_indicator.is_some() {
+ content = content.replace(
+ "{fullscreen_indicator}",
+ if tab.is_fullscreen_active {
+ self.fullscreen_indicator.as_ref().unwrap()
+ } else {
+ ""
+ },
+ );
+ }
+
+ if content.contains("{sync_indicator}") && self.sync_indicator.is_some() {
+ content = content.replace(
+ "{sync_indicator}",
+ if tab.is_sync_panes_active {
+ self.sync_indicator.as_ref().unwrap()
+ } else {
+ ""
+ },
+ );
+ }
+
+ 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![]);
+
+ let is_floating = panes_for_tab.iter().any(|p| p.is_floating);
+
+ content = content.replace(
+ "{floating_indicator}",
+ if is_floating {
+ self.floating_indicator.as_ref().unwrap()
+ } else {
+ ""
+ },
+ );
+ }
+
+ content
+ }
}