aboutsummaryrefslogtreecommitdiffstats
path: root/zellij-utils/src/plugin_api
diff options
context:
space:
mode:
authorAram Drevekenin <aram@poor.dev>2025-07-08 11:06:03 +0200
committerGitHub <noreply@github.com>2025-07-08 11:06:03 +0200
commit358caa180ce7c60b8923caa98cf339f897d14feb (patch)
treebb14df05b46d907a7af55ae98095abd8e9f4e7b4 /zellij-utils/src/plugin_api
parentfix(plugins): use the terminal title when spawning terminals (#4272) (diff)
downloadsl0ppij-358caa180ce7c60b8923caa98cf339f897d14feb.tar.gz
sl0ppij-358caa180ce7c60b8923caa98cf339f897d14feb.tar.xz
sl0ppij-358caa180ce7c60b8923caa98cf339f897d14feb.zip
fix(tabs): allow setting cwd without a layout (#4273)
* working for cli and keybinding * working for plugin API * style(fmt): rustfmt * docs(changelog): add PR
Diffstat (limited to 'zellij-utils/src/plugin_api')
-rw-r--r--zellij-utils/src/plugin_api/action.rs2
-rw-r--r--zellij-utils/src/plugin_api/plugin_command.proto6
-rw-r--r--zellij-utils/src/plugin_api/plugin_command.rs23
3 files changed, 22 insertions, 9 deletions
diff --git a/zellij-utils/src/plugin_api/action.rs b/zellij-utils/src/plugin_api/action.rs
index d018ea1b..3aaa6ee1 100644
--- a/zellij-utils/src/plugin_api/action.rs
+++ b/zellij-utils/src/plugin_api/action.rs
@@ -315,7 +315,7 @@ impl TryFrom<ProtobufAction> for Action {
Some(_) => Err("NewTab should not have a payload"),
None => {
// we do not serialize the layouts of this action
- Ok(Action::NewTab(None, vec![], None, None, None, true))
+ Ok(Action::NewTab(None, vec![], None, None, None, true, None))
},
}
},
diff --git a/zellij-utils/src/plugin_api/plugin_command.proto b/zellij-utils/src/plugin_api/plugin_command.proto
index b1797214..d46ba1e3 100644
--- a/zellij-utils/src/plugin_api/plugin_command.proto
+++ b/zellij-utils/src/plugin_api/plugin_command.proto
@@ -265,9 +265,15 @@ message PluginCommand {
RevokeWebLoginTokenPayload revoke_web_login_token_payload = 109;
RenameWebLoginTokenPayload rename_web_login_token_payload = 110;
ReplacePaneWithExistingPanePayload replace_pane_with_existing_pane_payload = 111;
+ NewTabPayload new_tab_payload = 112;
}
}
+message NewTabPayload {
+ optional string name = 1;
+ optional string cwd = 2;
+}
+
message ReplacePaneWithExistingPanePayload {
PaneId pane_id_to_replace = 1;
PaneId existing_pane_id = 2;
diff --git a/zellij-utils/src/plugin_api/plugin_command.rs b/zellij-utils/src/plugin_api/plugin_command.rs
index 296a8a74..073284bc 100644
--- a/zellij-utils/src/plugin_api/plugin_command.rs
+++ b/zellij-utils/src/plugin_api/plugin_command.rs
@@ -16,7 +16,7 @@ pub use super::generated_api::api::{
HttpVerb as ProtobufHttpVerb, IdAndNewName, KeyToRebind, KeyToUnbind, KillSessionsPayload,
ListTokensResponse, LoadNewPluginPayload, MessageToPluginPayload,
MovePaneWithPaneIdInDirectionPayload, MovePaneWithPaneIdPayload, MovePayload,
- NewPluginArgs as ProtobufNewPluginArgs, NewTabsWithLayoutInfoPayload,
+ NewPluginArgs as ProtobufNewPluginArgs, NewTabPayload, NewTabsWithLayoutInfoPayload,
OpenCommandPaneFloatingNearPluginPayload, OpenCommandPaneInPlaceOfPluginPayload,
OpenCommandPaneNearPluginPayload, OpenCommandPanePayload,
OpenFileFloatingNearPluginPayload, OpenFileInPlaceOfPluginPayload,
@@ -474,11 +474,18 @@ impl TryFrom<ProtobufPluginCommand> for PluginCommand {
},
_ => Err("Mismatched payload for NewTabsWithLayout"),
},
- Some(CommandName::NewTab) => {
- if protobuf_plugin_command.payload.is_some() {
- return Err("NewTab should not have a payload");
- }
- Ok(PluginCommand::NewTab)
+ Some(CommandName::NewTab) => match protobuf_plugin_command.payload {
+ Some(Payload::NewTabPayload(protobuf_new_tab_payload)) => {
+ Ok(PluginCommand::NewTab {
+ name: protobuf_new_tab_payload.name,
+ cwd: protobuf_new_tab_payload.cwd,
+ })
+ },
+ None => Ok(PluginCommand::NewTab {
+ name: None,
+ cwd: None,
+ }),
+ _ => Err("Mismatched payload for NewTab"),
},
Some(CommandName::GoToNextTab) => {
if protobuf_plugin_command.payload.is_some() {
@@ -1886,9 +1893,9 @@ impl TryFrom<PluginCommand> for ProtobufPluginCommand {
name: CommandName::NewTabsWithLayout as i32,
payload: Some(Payload::NewTabsWithLayoutPayload(raw_layout)),
}),
- PluginCommand::NewTab => Ok(ProtobufPluginCommand {
+ PluginCommand::NewTab { name, cwd } => Ok(ProtobufPluginCommand {
name: CommandName::NewTab as i32,
- payload: None,
+ payload: Some(Payload::NewTabPayload(NewTabPayload { name, cwd })),
}),
PluginCommand::GoToNextTab => Ok(ProtobufPluginCommand {
name: CommandName::GoToNextTab as i32,