aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDaniel Jankowski <daniel.jankowski@rub.de>2023-08-31 22:35:27 +0200
committerDaniel Jankowski <daniel.jankowski@rub.de>2023-08-31 22:35:27 +0200
commitea771fca01837e6f6ee390189360205c0ac0f3ea (patch)
tree7fc4ef8aa27ce8a706a36af1459c08759ebb7ef1 /src
parentfix: crash on tab creation (diff)
downloadsl0pstatus-ea771fca01837e6f6ee390189360205c0ac0f3ea.tar.gz
sl0pstatus-ea771fca01837e6f6ee390189360205c0ac0f3ea.tar.xz
sl0pstatus-ea771fca01837e6f6ee390189360205c0ac0f3ea.zip
feat: add session plugin
Diffstat (limited to 'src')
-rw-r--r--src/main.rs11
-rw-r--r--src/render.rs9
-rw-r--r--src/widgets/mod.rs1
-rw-r--r--src/widgets/session.rs26
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(),
+ }
+ }
+}