diff options
| author | Daniel Jankowski <daniel.jankowski@rub.de> | 2024-02-04 16:16:45 +0100 |
|---|---|---|
| committer | Daniel Jankowski <daniel.jankowski@rub.de> | 2024-02-04 16:16:45 +0100 |
| commit | 15c91087b6c7bd75249f4bab871db3a3f7bab1e3 (patch) | |
| tree | e011ce3dfc29054e9ed5c37b5bf34a6fcb3c5988 /src/widgets | |
| parent | feat: configure default mode ref for unspecified mode (diff) | |
| download | sl0pstatus-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.rs | 21 |
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)); } |
