From d84cdec7307dee556fdc466c7fddc6bb5333a449 Mon Sep 17 00:00:00 2001 From: Aram Drevekenin Date: Mon, 14 Oct 2024 13:13:52 +0200 Subject: [PATCH] fix(resurrection): plugin alias resurrection (#3673) * fix(resurrection): make sure plugin aliases are serialized properly * style(fmt): rustfmt --- zellij-server/src/plugins/mod.rs | 26 +++++++++++++++++--- zellij-server/src/session_layout_metadata.rs | 5 ++++ zellij-utils/src/session_serialization.rs | 9 ++++++- 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/zellij-server/src/plugins/mod.rs b/zellij-server/src/plugins/mod.rs index 7f412d52..564af769 100644 --- a/zellij-server/src/plugins/mod.rs +++ b/zellij-server/src/plugins/mod.rs @@ -552,21 +552,33 @@ pub(crate) fn plugin_thread_main( )?; }, PluginInstruction::DumpLayout(mut session_layout_metadata, client_id) => { - populate_session_layout_metadata(&mut session_layout_metadata, &wasm_bridge); + populate_session_layout_metadata( + &mut session_layout_metadata, + &wasm_bridge, + &plugin_aliases, + ); drop(bus.senders.send_to_pty(PtyInstruction::DumpLayout( session_layout_metadata, client_id, ))); }, PluginInstruction::ListClientsMetadata(mut session_layout_metadata, client_id) => { - populate_session_layout_metadata(&mut session_layout_metadata, &wasm_bridge); + populate_session_layout_metadata( + &mut session_layout_metadata, + &wasm_bridge, + &plugin_aliases, + ); drop(bus.senders.send_to_pty(PtyInstruction::ListClientsMetadata( session_layout_metadata, client_id, ))); }, PluginInstruction::DumpLayoutToPlugin(mut session_layout_metadata, plugin_id) => { - populate_session_layout_metadata(&mut session_layout_metadata, &wasm_bridge); + populate_session_layout_metadata( + &mut session_layout_metadata, + &wasm_bridge, + &plugin_aliases, + ); match session_serialization::serialize_session_layout( session_layout_metadata.into(), ) { @@ -592,7 +604,11 @@ pub(crate) fn plugin_thread_main( } }, PluginInstruction::LogLayoutToHd(mut session_layout_metadata) => { - populate_session_layout_metadata(&mut session_layout_metadata, &wasm_bridge); + populate_session_layout_metadata( + &mut session_layout_metadata, + &wasm_bridge, + &plugin_aliases, + ); drop( bus.senders .send_to_pty(PtyInstruction::LogLayoutToHd(session_layout_metadata)), @@ -871,6 +887,7 @@ pub(crate) fn plugin_thread_main( fn populate_session_layout_metadata( session_layout_metadata: &mut SessionLayoutMetadata, wasm_bridge: &WasmBridge, + plugin_aliases: &PluginAliases, ) { let plugin_ids = session_layout_metadata.all_plugin_ids(); let mut plugin_ids_to_cmds: HashMap = HashMap::new(); @@ -884,6 +901,7 @@ fn populate_session_layout_metadata( } } session_layout_metadata.update_plugin_cmds(plugin_ids_to_cmds); + session_layout_metadata.update_plugin_aliases_in_default_layout(plugin_aliases); } fn pipe_to_all_plugins( diff --git a/zellij-server/src/session_layout_metadata.rs b/zellij-server/src/session_layout_metadata.rs index 706d75a1..1faa9f6b 100644 --- a/zellij-server/src/session_layout_metadata.rs +++ b/zellij-server/src/session_layout_metadata.rs @@ -7,6 +7,7 @@ use zellij_utils::pane_size::PaneGeom; use zellij_utils::{ input::command::RunCommand, input::layout::{Layout, Run, RunPlugin, RunPluginOrAlias}, + input::plugins::PluginAliases, session_serialization::{ extract_command_and_args, extract_edit_and_line_number, extract_plugin_and_config, GlobalLayoutManifest, PaneLayoutManifest, TabLayoutManifest, @@ -278,6 +279,10 @@ impl SessionLayoutMetadata { }); self.default_editor = Some(default_editor); } + pub fn update_plugin_aliases_in_default_layout(&mut self, plugin_aliases: &PluginAliases) { + self.default_layout + .populate_plugin_aliases_in_layout(&plugin_aliases); + } } impl Into for SessionLayoutMetadata { diff --git a/zellij-utils/src/session_serialization.rs b/zellij-utils/src/session_serialization.rs index 1586e6cd..bc6748fd 100644 --- a/zellij-utils/src/session_serialization.rs +++ b/zellij-utils/src/session_serialization.rs @@ -234,7 +234,14 @@ pub fn extract_plugin_and_config( Some(run_plugin.configuration.clone()), ), RunPluginOrAlias::Alias(plugin_alias) => { - let name = plugin_alias.name.clone(); + // in this case, the aliases should already be populated by the RunPlugins they + // translate to - if they are not, the alias either does not exist or this is some + // sort of bug + let name = plugin_alias + .run_plugin + .as_ref() + .map(|run_plugin| run_plugin.location.display().to_string()) + .unwrap_or_else(|| plugin_alias.name.clone()); let configuration = plugin_alias .run_plugin .as_ref()