diff options
| author | Aram Drevekenin <aram@poor.dev> | 2025-07-08 11:06:03 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-08 11:06:03 +0200 |
| commit | 358caa180ce7c60b8923caa98cf339f897d14feb (patch) | |
| tree | bb14df05b46d907a7af55ae98095abd8e9f4e7b4 /zellij-utils/src/plugin_api | |
| parent | fix(plugins): use the terminal title when spawning terminals (#4272) (diff) | |
| download | sl0ppij-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.rs | 2 | ||||
| -rw-r--r-- | zellij-utils/src/plugin_api/plugin_command.proto | 6 | ||||
| -rw-r--r-- | zellij-utils/src/plugin_api/plugin_command.rs | 23 |
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, |
