aboutsummaryrefslogtreecommitdiffstats
path: root/src/widgets
diff options
context:
space:
mode:
authorDaniel Jankowski <daniel.jankowski@rub.de>2024-02-04 16:16:45 +0100
committerDaniel Jankowski <daniel.jankowski@rub.de>2024-02-04 16:16:45 +0100
commit15c91087b6c7bd75249f4bab871db3a3f7bab1e3 (patch)
treee011ce3dfc29054e9ed5c37b5bf34a6fcb3c5988 /src/widgets
parentfeat: configure default mode ref for unspecified mode (diff)
downloadsl0pstatus-15c91087b6c7bd75249f4bab871db3a3f7bab1e3.tar.gz
sl0pstatus-15c91087b6c7bd75249f4bab871db3a3f7bab1e3.tar.xz
sl0pstatus-15c91087b6c7bd75249f4bab871db3a3f7bab1e3.zip
feat: add floating panel total count to tabs
Diffstat (limited to 'src/widgets')
-rw-r--r--src/widgets/tabs.rs21
1 files changed, 17 insertions, 4 deletions
diff --git a/src/widgets/tabs.rs b/src/widgets/tabs.rs
index 4769d31..3cfdfbf 100644
--- a/src/widgets/tabs.rs
+++ b/src/widgets/tabs.rs
@@ -1,6 +1,9 @@
use std::collections::BTreeMap;
-use zellij_tile::{prelude::TabInfo, shim::switch_tab_to};
+use zellij_tile::{
+ prelude::{PaneInfo, PaneManifest, TabInfo},
+ shim::switch_tab_to,
+};
use crate::{config::ZellijState, render::FormattedPart};
@@ -70,7 +73,7 @@ impl Widget for TabsWidget {
let mut counter = 0;
for tab in &state.tabs {
- let content = self.render_tab(tab);
+ let content = self.render_tab(tab, &state.panes);
counter += 1;
output = format!("{}{}", output, content);
@@ -92,7 +95,7 @@ impl Widget for TabsWidget {
for tab in &state.tabs {
counter += 1;
- let mut rendered_content = self.render_tab(tab);
+ let mut rendered_content = self.render_tab(tab, &state.panes);
if counter < state.tabs.len() {
if let Some(sep) = &self.separator {
@@ -140,7 +143,7 @@ impl TabsWidget {
&self.normal_tab_format
}
- fn render_tab(&self, tab: &TabInfo) -> String {
+ fn render_tab(&self, tab: &TabInfo, panes: &PaneManifest) -> String {
let formatters = self.select_format(tab);
let mut output = "".to_owned();
@@ -155,6 +158,16 @@ impl TabsWidget {
content = content.replace("{index}", (tab.position + 1).to_string().as_str());
}
+ if content.contains("{floating_total_count}") {
+ let panes_for_tab: Vec<PaneInfo> =
+ panes.panes.get(&tab.position).cloned().unwrap_or(vec![]);
+
+ content = content.replace(
+ "{floating_total_count}",
+ &format!("{}", panes_for_tab.iter().filter(|p| p.is_floating).count()),
+ );
+ }
+
output = format!("{}{}", output, f.format_string(&content));
}