aboutsummaryrefslogtreecommitdiffstats
path: root/zellij-utils/src/plugin_api/plugin_command.rs
diff options
context:
space:
mode:
authorAram Drevekenin <aram@poor.dev>2023-10-16 13:42:19 +0200
committerGitHub <noreply@github.com>2023-10-16 13:42:19 +0200
commitd2b6fb5c5b0423143d71218196a56ea3e395cd47 (patch)
treeb913e91850c9eb98f554aec2dfc94cbe9b11bca6 /zellij-utils/src/plugin_api/plugin_command.rs
parentfix(plugins): make new auxiliary functions public (#2765) (diff)
downloadsl0ppij-d2b6fb5c5b0423143d71218196a56ea3e395cd47.tar.gz
sl0ppij-d2b6fb5c5b0423143d71218196a56ea3e395cd47.tar.xz
sl0ppij-d2b6fb5c5b0423143d71218196a56ea3e395cd47.zip
feat(plugins): plugin run_command api (#2862)
* prototype * add tests * style(fmt): rustfmt * update comments * deprecation warning for execcmd
Diffstat (limited to 'zellij-utils/src/plugin_api/plugin_command.rs')
-rw-r--r--zellij-utils/src/plugin_api/plugin_command.rs50
1 files changed, 47 insertions, 3 deletions
diff --git a/zellij-utils/src/plugin_api/plugin_command.rs b/zellij-utils/src/plugin_api/plugin_command.rs
index 3d34f10f..181953d4 100644
--- a/zellij-utils/src/plugin_api/plugin_command.rs
+++ b/zellij-utils/src/plugin_api/plugin_command.rs
@@ -3,9 +3,10 @@ pub use super::generated_api::api::{
event::EventNameList as ProtobufEventNameList,
input_mode::InputMode as ProtobufInputMode,
plugin_command::{
- plugin_command::Payload, CommandName, ExecCmdPayload, IdAndNewName, MovePayload,
- OpenCommandPanePayload, OpenFilePayload, PluginCommand as ProtobufPluginCommand,
- PluginMessagePayload, RequestPluginPermissionPayload, ResizePayload, SetTimeoutPayload,
+ plugin_command::Payload, CommandName, ContextItem, EnvVariable, ExecCmdPayload,
+ IdAndNewName, MovePayload, OpenCommandPanePayload, OpenFilePayload,
+ PluginCommand as ProtobufPluginCommand, PluginMessagePayload,
+ RequestPluginPermissionPayload, ResizePayload, RunCommandPayload, SetTimeoutPayload,
SubscribePayload, SwitchSessionPayload, SwitchTabToPayload, UnsubscribePayload,
},
plugin_permission::PermissionType as ProtobufPermissionType,
@@ -14,7 +15,9 @@ pub use super::generated_api::api::{
use crate::data::{ConnectToSession, PermissionType, PluginCommand};
+use std::collections::BTreeMap;
use std::convert::TryFrom;
+use std::path::PathBuf;
impl TryFrom<ProtobufPluginCommand> for PluginCommand {
type Error = &'static str;
@@ -553,6 +556,27 @@ impl TryFrom<ProtobufPluginCommand> for PluginCommand {
},
_ => Err("Mismatched payload for OpenCommandPaneInPlace"),
},
+ Some(CommandName::RunCommand) => match protobuf_plugin_command.payload {
+ Some(Payload::RunCommandPayload(run_command_payload)) => {
+ let env_variables: BTreeMap<String, String> = run_command_payload
+ .env_variables
+ .into_iter()
+ .map(|e| (e.name, e.value))
+ .collect();
+ let context: BTreeMap<String, String> = run_command_payload
+ .context
+ .into_iter()
+ .map(|e| (e.name, e.value))
+ .collect();
+ Ok(PluginCommand::RunCommand(
+ run_command_payload.command_line,
+ env_variables,
+ PathBuf::from(run_command_payload.cwd),
+ context,
+ ))
+ },
+ _ => Err("Mismatched payload for RunCommand"),
+ },
None => Err("Unrecognized plugin command"),
}
}
@@ -928,6 +952,26 @@ impl TryFrom<PluginCommand> for ProtobufPluginCommand {
},
)),
}),
+ PluginCommand::RunCommand(command_line, env_variables, cwd, context) => {
+ let env_variables: Vec<_> = env_variables
+ .into_iter()
+ .map(|(name, value)| EnvVariable { name, value })
+ .collect();
+ let context: Vec<_> = context
+ .into_iter()
+ .map(|(name, value)| ContextItem { name, value })
+ .collect();
+ let cwd = cwd.display().to_string();
+ Ok(ProtobufPluginCommand {
+ name: CommandName::RunCommand as i32,
+ payload: Some(Payload::RunCommandPayload(RunCommandPayload {
+ command_line,
+ env_variables,
+ cwd,
+ context,
+ })),
+ })
+ },
}
}
}