aboutsummaryrefslogtreecommitdiffstats
path: root/default-plugins/compact-bar/src/main.rs
diff options
context:
space:
mode:
authorAram Drevekenin <aram@poor.dev>2026-03-26 12:49:05 +0100
committerGitHub <noreply@github.com>2026-03-26 12:49:05 +0100
commit12ee607532d8894b7dff1f29143f073783bd4445 (patch)
treeeb1c57037850be4a9cde4855680dac27cce55c5e /default-plugins/compact-bar/src/main.rs
parentfix: do not reset layout selection in layout manager (#4919) (diff)
downloadsl0ppij-12ee607532d8894b7dff1f29143f073783bd4445.tar.gz
sl0ppij-12ee607532d8894b7dff1f29143f073783bd4445.tar.xz
sl0ppij-12ee607532d8894b7dff1f29143f073783bd4445.zip
fix: performance regression when switching tabs (#4918)
* remove pane render report * only collect pane contents if pane should render * add logs * conditional keybinding serialization * remove logs * rustfmt * fix tests * tests * rustfmt
Diffstat (limited to '')
-rw-r--r--default-plugins/compact-bar/src/main.rs26
1 files changed, 24 insertions, 2 deletions
diff --git a/default-plugins/compact-bar/src/main.rs b/default-plugins/compact-bar/src/main.rs
index 074e5181..3a8446a5 100644
--- a/default-plugins/compact-bar/src/main.rs
+++ b/default-plugins/compact-bar/src/main.rs
@@ -60,6 +60,9 @@ struct State {
is_first_run: bool,
own_tab_index: Option<usize>,
own_client_id: u16,
+
+ // Keybinding cache
+ cached_keybinds: KeybindsVec,
}
struct TabRenderData {
@@ -85,7 +88,21 @@ impl ZellijPlugin for State {
self.is_first_run = false;
match event {
- Event::ModeUpdate(mode_info) => self.handle_mode_update(mode_info),
+ Event::InitialKeybinds(keybinds) => {
+ self.cached_keybinds = keybinds;
+ if !self.cached_keybinds.is_empty() {
+ self.mode_info.keybinds = self.cached_keybinds.clone();
+ }
+ true
+ },
+ Event::ModeUpdate(mut mode_info) => {
+ if mode_info.keybinds.is_empty() && !self.cached_keybinds.is_empty() {
+ mode_info.keybinds = self.cached_keybinds.clone();
+ } else if !mode_info.keybinds.is_empty() {
+ self.cached_keybinds = mode_info.keybinds.clone();
+ }
+ self.handle_mode_update(mode_info)
+ },
Event::TabUpdate(tabs) => self.handle_tab_update(tabs),
Event::PaneUpdate(pane_manifest) => self.handle_pane_update(pane_manifest),
Event::Mouse(mouse_event) => {
@@ -146,7 +163,11 @@ impl State {
set_selectable(false);
let events = if self.is_tooltip {
- vec![EventType::ModeUpdate, EventType::TabUpdate]
+ vec![
+ EventType::ModeUpdate,
+ EventType::TabUpdate,
+ EventType::InitialKeybinds,
+ ]
} else {
vec![
EventType::TabUpdate,
@@ -156,6 +177,7 @@ impl State {
EventType::CopyToClipboard,
EventType::InputReceived,
EventType::SystemClipboardFailure,
+ EventType::InitialKeybinds,
]
};