Skip to content

Commit

Permalink
fix(resurrection): plugin alias resurrection (#3673)
Browse files Browse the repository at this point in the history
* fix(resurrection): make sure plugin aliases are serialized properly

* style(fmt): rustfmt
  • Loading branch information
imsnif authored Oct 14, 2024
1 parent 3e40d89 commit d84cdec
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 5 deletions.
26 changes: 22 additions & 4 deletions zellij-server/src/plugins/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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(),
) {
Expand All @@ -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)),
Expand Down Expand Up @@ -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<u32, RunPlugin> = HashMap::new();
Expand All @@ -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(
Expand Down
5 changes: 5 additions & 0 deletions zellij-server/src/session_layout_metadata.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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<GlobalLayoutManifest> for SessionLayoutMetadata {
Expand Down
9 changes: 8 additions & 1 deletion zellij-utils/src/session_serialization.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down

0 comments on commit d84cdec

Please sign in to comment.