aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAram Drevekenin <aram@poor.dev>2024-10-14 13:13:52 +0200
committerGitHub <noreply@github.com>2024-10-14 13:13:52 +0200
commitd84cdec7307dee556fdc466c7fddc6bb5333a449 (patch)
tree84fcddef925485312f8470617255e294d3a20957
parentdocs(changelog): fix http requests for macos (diff)
downloadsl0ppij-d84cdec7307dee556fdc466c7fddc6bb5333a449.tar.gz
sl0ppij-d84cdec7307dee556fdc466c7fddc6bb5333a449.tar.xz
sl0ppij-d84cdec7307dee556fdc466c7fddc6bb5333a449.zip
fix(resurrection): plugin alias resurrection (#3673)
* fix(resurrection): make sure plugin aliases are serialized properly * style(fmt): rustfmt
-rw-r--r--zellij-server/src/plugins/mod.rs26
-rw-r--r--zellij-server/src/session_layout_metadata.rs5
-rw-r--r--zellij-utils/src/session_serialization.rs9
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<u32, RunPlugin> = 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<GlobalLayoutManifest> 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()