diff options
| author | Aram Drevekenin <aram@poor.dev> | 2023-10-16 13:42:19 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-10-16 13:42:19 +0200 |
| commit | d2b6fb5c5b0423143d71218196a56ea3e395cd47 (patch) | |
| tree | b913e91850c9eb98f554aec2dfc94cbe9b11bca6 /zellij-utils/src/plugin_api/plugin_command.rs | |
| parent | fix(plugins): make new auxiliary functions public (#2765) (diff) | |
| download | sl0ppij-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.rs | 50 |
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, + })), + }) + }, } } } |
