aboutsummaryrefslogtreecommitdiffstats
path: root/zellij-utils
diff options
context:
space:
mode:
authorAram Drevekenin <aram@poor.dev>2026-02-12 18:35:55 +0100
committerGitHub <noreply@github.com>2026-02-12 18:35:55 +0100
commite887164a0a1fa07ae3786b846ee4b43a613dba24 (patch)
tree21eae01fd0553b80a4bb931a19a92d59616f98be /zellij-utils
parentPropagate plugin alias config changes to plugins (#4698) (diff)
downloadsl0ppij-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.rs17
-rw-r--r--zellij-utils/assets/prost/api.plugin_permission.rs3
-rw-r--r--zellij-utils/src/data.rs5
-rw-r--r--zellij-utils/src/plugin_api/plugin_command.proto8
-rw-r--r--zellij-utils/src/plugin_api/plugin_command.rs21
-rw-r--r--zellij-utils/src/plugin_api/plugin_permission.proto1
-rw-r--r--zellij-utils/src/plugin_api/plugin_permission.rs6
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)
+ },
}
}
}