diff options
| author | Aram Drevekenin <aram@poor.dev> | 2026-03-26 12:49:05 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-03-26 12:49:05 +0100 |
| commit | 12ee607532d8894b7dff1f29143f073783bd4445 (patch) | |
| tree | eb1c57037850be4a9cde4855680dac27cce55c5e /default-plugins/compact-bar/src/main.rs | |
| parent | fix: do not reset layout selection in layout manager (#4919) (diff) | |
| download | sl0ppij-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.rs | 26 |
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, ] }; |
