diff options
| author | Aram Drevekenin <aram@poor.dev> | 2026-02-12 18:35:55 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-02-12 18:35:55 +0100 |
| commit | e887164a0a1fa07ae3786b846ee4b43a613dba24 (patch) | |
| tree | 21eae01fd0553b80a4bb931a19a92d59616f98be /zellij-utils | |
| parent | Propagate plugin alias config changes to plugins (#4698) (diff) | |
| download | sl0ppij-e887164a0a1fa07ae3786b846ee4b43a613dba24.tar.gz sl0ppij-e887164a0a1fa07ae3786b846ee4b43a613dba24.tar.xz sl0ppij-e887164a0a1fa07ae3786b846ee4b43a613dba24.zip | |
Allow plugins to read env vars present upon session creation (behind permission) (#4700)
* allow plugins to read environment variables
* rustfmt
* add pr
Diffstat (limited to 'zellij-utils')
| -rw-r--r-- | zellij-utils/assets/prost/api.plugin_command.rs | 17 | ||||
| -rw-r--r-- | zellij-utils/assets/prost/api.plugin_permission.rs | 3 | ||||
| -rw-r--r-- | zellij-utils/src/data.rs | 5 | ||||
| -rw-r--r-- | zellij-utils/src/plugin_api/plugin_command.proto | 8 | ||||
| -rw-r--r-- | zellij-utils/src/plugin_api/plugin_command.rs | 21 | ||||
| -rw-r--r-- | zellij-utils/src/plugin_api/plugin_permission.proto | 1 | ||||
| -rw-r--r-- | zellij-utils/src/plugin_api/plugin_permission.rs | 6 |
7 files changed, 58 insertions, 3 deletions
diff --git a/zellij-utils/assets/prost/api.plugin_command.rs b/zellij-utils/assets/prost/api.plugin_command.rs index 90023ef1..1d1d0288 100644 --- a/zellij-utils/assets/prost/api.plugin_command.rs +++ b/zellij-utils/assets/prost/api.plugin_command.rs @@ -3,7 +3,7 @@ pub struct PluginCommand { #[prost(enumeration="CommandName", tag="1")] pub name: i32, - #[prost(oneof="plugin_command::Payload", tags="2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147")] + #[prost(oneof="plugin_command::Payload", tags="2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148")] pub payload: ::core::option::Option<plugin_command::Payload>, } /// Nested message and enum types in `PluginCommand`. @@ -277,6 +277,8 @@ pub mod plugin_command { RenameTabWithIdPayload(super::RenameTabWithIdPayload), #[prost(message, tag="147")] BreakPanesToTabWithIdPayload(super::BreakPanesToTabWithIdPayload), + #[prost(message, tag="148")] + GetSessionEnvironmentVariablesPayload(super::GetSessionEnvironmentVariablesPayload), } } #[allow(clippy::derive_partial_eq_without_eq)] @@ -1624,6 +1626,16 @@ pub struct OpenCommandPaneBackgroundResponse { #[prost(message, optional, tag="1")] pub pane_id: ::core::option::Option<PaneId>, } +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct GetSessionEnvironmentVariablesPayload { +} +#[allow(clippy::derive_partial_eq_without_eq)] +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct GetSessionEnvironmentVariablesResponse { + #[prost(message, repeated, tag="1")] + pub env_vars: ::prost::alloc::vec::Vec<EnvVariable>, +} #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] #[repr(i32)] pub enum CommandName { @@ -1803,6 +1815,7 @@ pub enum CommandName { CloseTabWithId = 194, RenameTabWithId = 195, BreakPanesToTabWithId = 196, + GetSessionEnvironmentVariables = 197, } impl CommandName { /// String value of the enum field names used in the ProtoBuf definition. @@ -1987,6 +2000,7 @@ impl CommandName { CommandName::CloseTabWithId => "CloseTabWithId", CommandName::RenameTabWithId => "RenameTabWithId", CommandName::BreakPanesToTabWithId => "BreakPanesToTabWithId", + CommandName::GetSessionEnvironmentVariables => "GetSessionEnvironmentVariables", } } /// Creates an enum from field names used in the ProtoBuf definition. @@ -2168,6 +2182,7 @@ impl CommandName { "CloseTabWithId" => Some(Self::CloseTabWithId), "RenameTabWithId" => Some(Self::RenameTabWithId), "BreakPanesToTabWithId" => Some(Self::BreakPanesToTabWithId), + "GetSessionEnvironmentVariables" => Some(Self::GetSessionEnvironmentVariables), _ => None, } } diff --git a/zellij-utils/assets/prost/api.plugin_permission.rs b/zellij-utils/assets/prost/api.plugin_permission.rs index e113273a..5da4fcf8 100644 --- a/zellij-utils/assets/prost/api.plugin_permission.rs +++ b/zellij-utils/assets/prost/api.plugin_permission.rs @@ -17,6 +17,7 @@ pub enum PermissionType { ReadPaneContents = 13, RunActionsAsUser = 14, WriteToClipboard = 15, + ReadSessionEnvironmentVariables = 16, } impl PermissionType { /// String value of the enum field names used in the ProtoBuf definition. @@ -41,6 +42,7 @@ impl PermissionType { PermissionType::ReadPaneContents => "ReadPaneContents", PermissionType::RunActionsAsUser => "RunActionsAsUser", PermissionType::WriteToClipboard => "WriteToClipboard", + PermissionType::ReadSessionEnvironmentVariables => "ReadSessionEnvironmentVariables", } } /// Creates an enum from field names used in the ProtoBuf definition. @@ -62,6 +64,7 @@ impl PermissionType { "ReadPaneContents" => Some(Self::ReadPaneContents), "RunActionsAsUser" => Some(Self::RunActionsAsUser), "WriteToClipboard" => Some(Self::WriteToClipboard), + "ReadSessionEnvironmentVariables" => Some(Self::ReadSessionEnvironmentVariables), _ => None, } } diff --git a/zellij-utils/src/data.rs b/zellij-utils/src/data.rs index 1a035edc..b770eee0 100644 --- a/zellij-utils/src/data.rs +++ b/zellij-utils/src/data.rs @@ -1055,6 +1055,7 @@ pub enum Permission { ReadPaneContents, RunActionsAsUser, WriteToClipboard, + ReadSessionEnvironmentVariables, } impl PermissionType { @@ -1086,6 +1087,9 @@ impl PermissionType { }, PermissionType::RunActionsAsUser => "Execute actions as the user".to_owned(), PermissionType::WriteToClipboard => "Write to clipboard".to_owned(), + PermissionType::ReadSessionEnvironmentVariables => { + "Read environment variables present upon session creation".to_owned() + }, } } } @@ -3445,6 +3449,7 @@ pub enum PluginCommand { CurrentSessionLastSavedTime, GetPaneInfo(PaneId), GetTabInfo(usize), // tab_id + GetSessionEnvironmentVariables, } // Response types for plugin API methods that create tabs diff --git a/zellij-utils/src/plugin_api/plugin_command.proto b/zellij-utils/src/plugin_api/plugin_command.proto index a2a25f99..66099298 100644 --- a/zellij-utils/src/plugin_api/plugin_command.proto +++ b/zellij-utils/src/plugin_api/plugin_command.proto @@ -189,6 +189,7 @@ enum CommandName { CloseTabWithId = 194; RenameTabWithId = 195; BreakPanesToTabWithId = 196; + GetSessionEnvironmentVariables = 197; } message PluginCommand { @@ -327,6 +328,7 @@ message PluginCommand { CloseTabWithIdPayload close_tab_with_id_payload = 145; RenameTabWithIdPayload rename_tab_with_id_payload = 146; BreakPanesToTabWithIdPayload break_panes_to_tab_with_id_payload = 147; + GetSessionEnvironmentVariablesPayload get_session_environment_variables_payload = 148; } } @@ -1123,3 +1125,9 @@ message OpenCommandPaneInPlaceOfPluginResponse { message OpenCommandPaneBackgroundResponse { optional PaneId pane_id = 1; } + +message GetSessionEnvironmentVariablesPayload {} + +message GetSessionEnvironmentVariablesResponse { + repeated EnvVariable env_vars = 1; +} diff --git a/zellij-utils/src/plugin_api/plugin_command.rs b/zellij-utils/src/plugin_api/plugin_command.rs index 6ade3376..94f5e1e1 100644 --- a/zellij-utils/src/plugin_api/plugin_command.rs +++ b/zellij-utils/src/plugin_api/plugin_command.rs @@ -41,8 +41,10 @@ pub use super::generated_api::api::{ GetPanePidResponse as ProtobufGetPanePidResponse, GetPaneRunningCommandPayload as ProtobufGetPaneRunningCommandPayload, GetPaneRunningCommandResponse as ProtobufGetPaneRunningCommandResponse, - GetPaneScrollbackPayload, GetTabInfoPayload, - GetTabInfoResponse as ProtobufGetTabInfoResponse, GoToTabWithIdPayload, + GetPaneScrollbackPayload, + GetSessionEnvironmentVariablesPayload as ProtobufGetSessionEnvironmentVariablesPayload, + GetSessionEnvironmentVariablesResponse as ProtobufGetSessionEnvironmentVariablesResponse, + GetTabInfoPayload, GetTabInfoResponse as ProtobufGetTabInfoResponse, GoToTabWithIdPayload, GroupAndUngroupPanesPayload, HidePaneWithIdPayload, HighlightAndUnhighlightPanesPayload, HttpVerb as ProtobufHttpVerb, IdAndNewName, KeyToRebind, KeyToUnbind, KillSessionsPayload, ListTokensResponse, LoadNewPluginPayload, MessageToPluginPayload, @@ -2259,6 +2261,14 @@ impl TryFrom<ProtobufPluginCommand> for PluginCommand { }, _ => Err("Malformed payload for GetTabInfo"), }, + Some(CommandName::GetSessionEnvironmentVariables) => { + match protobuf_plugin_command.payload { + Some(Payload::GetSessionEnvironmentVariablesPayload(_)) => { + Ok(PluginCommand::GetSessionEnvironmentVariables) + }, + _ => Err("Mismatched payload for GetSessionEnvironmentVariables"), + } + }, None => Err("Unrecognized plugin command"), } } @@ -3680,6 +3690,13 @@ impl TryFrom<PluginCommand> for ProtobufPluginCommand { tab_id: tab_id as u64, })), }), + PluginCommand::GetSessionEnvironmentVariables => { + let payload = ProtobufGetSessionEnvironmentVariablesPayload {}; + Ok(ProtobufPluginCommand { + name: CommandName::GetSessionEnvironmentVariables as i32, + payload: Some(Payload::GetSessionEnvironmentVariablesPayload(payload)), + }) + }, } } } diff --git a/zellij-utils/src/plugin_api/plugin_permission.proto b/zellij-utils/src/plugin_api/plugin_permission.proto index 779f6b32..ff286ea0 100644 --- a/zellij-utils/src/plugin_api/plugin_permission.proto +++ b/zellij-utils/src/plugin_api/plugin_permission.proto @@ -19,4 +19,5 @@ enum PermissionType { ReadPaneContents = 13; RunActionsAsUser = 14; WriteToClipboard = 15; + ReadSessionEnvironmentVariables = 16; } diff --git a/zellij-utils/src/plugin_api/plugin_permission.rs b/zellij-utils/src/plugin_api/plugin_permission.rs index 37782a08..3bd85300 100644 --- a/zellij-utils/src/plugin_api/plugin_permission.rs +++ b/zellij-utils/src/plugin_api/plugin_permission.rs @@ -31,6 +31,9 @@ impl TryFrom<ProtobufPermissionType> for PermissionType { ProtobufPermissionType::ReadPaneContents => Ok(PermissionType::ReadPaneContents), ProtobufPermissionType::RunActionsAsUser => Ok(PermissionType::RunActionsAsUser), ProtobufPermissionType::WriteToClipboard => Ok(PermissionType::WriteToClipboard), + ProtobufPermissionType::ReadSessionEnvironmentVariables => { + Ok(PermissionType::ReadSessionEnvironmentVariables) + }, } } } @@ -63,6 +66,9 @@ impl TryFrom<PermissionType> for ProtobufPermissionType { PermissionType::ReadPaneContents => Ok(ProtobufPermissionType::ReadPaneContents), PermissionType::RunActionsAsUser => Ok(ProtobufPermissionType::RunActionsAsUser), PermissionType::WriteToClipboard => Ok(ProtobufPermissionType::WriteToClipboard), + PermissionType::ReadSessionEnvironmentVariables => { + Ok(ProtobufPermissionType::ReadSessionEnvironmentVariables) + }, } } } |
