diff options
| author | Daniel Jankowski <daniel.jankowski@rub.de> | 2023-08-31 22:35:27 +0200 |
|---|---|---|
| committer | Daniel Jankowski <daniel.jankowski@rub.de> | 2023-08-31 22:35:27 +0200 |
| commit | ea771fca01837e6f6ee390189360205c0ac0f3ea (patch) | |
| tree | 7fc4ef8aa27ce8a706a36af1459c08759ebb7ef1 /src | |
| parent | fix: crash on tab creation (diff) | |
| download | sl0pstatus-ea771fca01837e6f6ee390189360205c0ac0f3ea.tar.gz sl0pstatus-ea771fca01837e6f6ee390189360205c0ac0f3ea.tar.xz sl0pstatus-ea771fca01837e6f6ee390189360205c0ac0f3ea.zip | |
feat: add session plugin
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.rs | 11 | ||||
| -rw-r--r-- | src/render.rs | 9 | ||||
| -rw-r--r-- | src/widgets/mod.rs | 1 | ||||
| -rw-r--r-- | src/widgets/session.rs | 26 |
4 files changed, 45 insertions, 2 deletions
diff --git a/src/main.rs b/src/main.rs index adbcaa3..13ed025 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,4 @@ -use widgets::{datetime::DateTimeWidget, mode::ModeWidget, tabs::TabsWidget, widget::Widget}; +use widgets::{datetime::DateTimeWidget, mode::ModeWidget, tabs::TabsWidget, widget::Widget, session::SessionWidget}; use zellij_tile::prelude::*; use std::{collections::BTreeMap, sync::Arc, u8, usize}; @@ -19,6 +19,7 @@ struct State { pub struct ZellijState { pub mode: ModeInfo, pub tabs: Vec<TabInfo>, + pub sessions: Vec<SessionInfo>, } register_plugin!(State); @@ -33,7 +34,7 @@ impl ZellijPlugin for State { PermissionType::ReadApplicationState, PermissionType::RunCommands, ]); - subscribe(&[EventType::ModeUpdate, EventType::TabUpdate, EventType::Key]); + subscribe(&[EventType::ModeUpdate, EventType::TabUpdate, EventType::SessionUpdate]); self.module_config = config::parse_format(configuration.clone()); self.widget_map = register_widgets(configuration); @@ -41,6 +42,7 @@ impl ZellijPlugin for State { self.state = ZellijState { mode: ModeInfo::default(), tabs: Vec::new(), + sessions: Vec::new(), }; } @@ -51,6 +53,10 @@ impl ZellijPlugin for State { self.state.mode = mode_info; should_render = true; } + Event::SessionUpdate(session_info) => { + self.state.sessions = session_info; + should_render = true; + } Event::TabUpdate(tab_info) => { self.state.tabs = tab_info; should_render = true; @@ -104,6 +110,7 @@ fn register_widgets(configuration: BTreeMap<String, String>) -> BTreeMap<String, "mode".to_string(), Arc::new(ModeWidget::new(configuration.clone())), ); + widget_map.insert("session".to_string(), Arc::new(SessionWidget::new(configuration.clone()))); widget_map.insert("tabs".to_string(), Arc::new(TabsWidget::new(configuration))); widget_map diff --git a/src/render.rs b/src/render.rs index 287c00d..279b458 100644 --- a/src/render.rs +++ b/src/render.rs @@ -44,6 +44,15 @@ pub fn widgets_and_formatting( output = output.replace("{mode}", &result); } + if output.contains("{session}") { + let result = match widgets.get("session") { + Some(widget) => widget.process(state.clone()), + None => "Use of uninitialized widget".to_string(), + }; + + output = output.replace("{session}", &result); + } + if output.contains("{tabs}") { let result = match widgets.get("tabs") { Some(widget) => widget.process(state), diff --git a/src/widgets/mod.rs b/src/widgets/mod.rs index c88bd21..3011d3c 100644 --- a/src/widgets/mod.rs +++ b/src/widgets/mod.rs @@ -1,4 +1,5 @@ pub mod datetime; pub mod mode; +pub mod session; pub mod tabs; pub mod widget; diff --git a/src/widgets/session.rs b/src/widgets/session.rs new file mode 100644 index 0000000..1849edc --- /dev/null +++ b/src/widgets/session.rs @@ -0,0 +1,26 @@ +use std::collections::BTreeMap; + +use super::widget::Widget; + +pub struct SessionWidget {} + +impl SessionWidget { + pub fn new(_config: BTreeMap<String, String>) -> Self { + Self {} + } +} + +impl Widget for SessionWidget { + fn process(&self, state: crate::ZellijState) -> String { + let session = state + .sessions + .into_iter() + .filter(|s| s.is_current_session) + .next(); + + match session { + Some(s) => s.name, + None => "".to_string(), + } + } +} |
