aboutsummaryrefslogtreecommitdiffstats
path: root/zellij-utils/src/plugin_api
diff options
context:
space:
mode:
authorDawidPietrykowski <53954695+DawidPietrykowski@users.noreply.github.com>2026-06-25 18:12:51 +0200
committerGitHub <noreply@github.com>2026-06-25 18:12:51 +0200
commitebd731b0ff12737a6e2160a255280534ef3991bd (patch)
tree4313963a269205391aa519fd090ea1de2b7cc4af /zellij-utils/src/plugin_api
parenttests: add more integration tests (#5308) (diff)
downloadsl0ppij-ebd731b0ff12737a6e2160a255280534ef3991bd.tar.gz
sl0ppij-ebd731b0ff12737a6e2160a255280534ef3991bd.tar.xz
sl0ppij-ebd731b0ff12737a6e2160a255280534ef3991bd.zip
feat(panes): `FocusLastPane` action (#4241)
* feat(panes): focus last pane (#4142) * add tests * add client id parameter to `add_floating_pane` * add action for floating panes * add tests for floating panes * add keybinds to configs * rebase fixes * simplify focus logic when adding stacked pane * formatting fix * formatting fix 2 * fix: make sure expanding pane always focuses it for all clients in stack * add pr * fix rebase --------- Co-authored-by: Aram Drevekenin <aram@poor.dev>
Diffstat (limited to 'zellij-utils/src/plugin_api')
-rw-r--r--zellij-utils/src/plugin_api/action.proto1
-rw-r--r--zellij-utils/src/plugin_api/action.rs8
-rw-r--r--zellij-utils/src/plugin_api/plugin_command.proto1
-rw-r--r--zellij-utils/src/plugin_api/plugin_command.rs10
4 files changed, 20 insertions, 0 deletions
diff --git a/zellij-utils/src/plugin_api/action.proto b/zellij-utils/src/plugin_api/action.proto
index 7eedf393..68c859b8 100644
--- a/zellij-utils/src/plugin_api/action.proto
+++ b/zellij-utils/src/plugin_api/action.proto
@@ -493,6 +493,7 @@ enum ActionName {
SetDarkTheme = 101;
SetLightTheme = 102;
ToggleTheme = 103;
+ FocusLastPane = 104;
}
message Position {
diff --git a/zellij-utils/src/plugin_api/action.rs b/zellij-utils/src/plugin_api/action.rs
index 34b3adce..f4e35d84 100644
--- a/zellij-utils/src/plugin_api/action.rs
+++ b/zellij-utils/src/plugin_api/action.rs
@@ -168,6 +168,10 @@ impl TryFrom<ProtobufAction> for Action {
Some(_) => Err("FocusPreviousPane should not have a payload"),
None => Ok(Action::FocusPreviousPane),
},
+ Some(ProtobufActionName::FocusLastPane) => match protobuf_action.optional_payload {
+ Some(_) => Err("FocusLastPane should not have a payload"),
+ None => Ok(Action::FocusLastPane),
+ },
Some(ProtobufActionName::SwitchFocus) => match protobuf_action.optional_payload {
Some(_) => Err("SwitchFocus should not have a payload"),
None => Ok(Action::SwitchFocus),
@@ -1173,6 +1177,10 @@ impl TryFrom<Action> for ProtobufAction {
name: ProtobufActionName::FocusPreviousPane as i32,
optional_payload: None,
}),
+ Action::FocusLastPane => Ok(ProtobufAction {
+ name: ProtobufActionName::FocusLastPane as i32,
+ optional_payload: None,
+ }),
Action::SwitchFocus => Ok(ProtobufAction {
name: ProtobufActionName::SwitchFocus as i32,
optional_payload: None,
diff --git a/zellij-utils/src/plugin_api/plugin_command.proto b/zellij-utils/src/plugin_api/plugin_command.proto
index c65bcbfd..82f4d835 100644
--- a/zellij-utils/src/plugin_api/plugin_command.proto
+++ b/zellij-utils/src/plugin_api/plugin_command.proto
@@ -213,6 +213,7 @@ enum CommandName {
NewTabUnfocused = 220;
NewTiledPaneInTab = 221;
ExitMobileMode = 222;
+ FocusLastPane = 223;
}
message PluginCommand {
diff --git a/zellij-utils/src/plugin_api/plugin_command.rs b/zellij-utils/src/plugin_api/plugin_command.rs
index 42b0774f..546c3586 100644
--- a/zellij-utils/src/plugin_api/plugin_command.rs
+++ b/zellij-utils/src/plugin_api/plugin_command.rs
@@ -980,6 +980,12 @@ impl TryFrom<ProtobufPluginCommand> for PluginCommand {
}
Ok(PluginCommand::FocusPreviousPane)
},
+ Some(CommandName::FocusLastPane) => {
+ if protobuf_plugin_command.payload.is_some() {
+ return Err("FocusLastPane should not have a payload");
+ }
+ Ok(PluginCommand::FocusLastPane)
+ },
Some(CommandName::MoveFocus) => match protobuf_plugin_command.payload {
Some(Payload::MoveFocusPayload(move_payload)) => match move_payload.direction {
Some(direction) => Ok(PluginCommand::MoveFocus(direction.try_into()?)),
@@ -3005,6 +3011,10 @@ impl TryFrom<PluginCommand> for ProtobufPluginCommand {
name: CommandName::FocusPreviousPane as i32,
payload: None,
}),
+ PluginCommand::FocusLastPane => Ok(ProtobufPluginCommand {
+ name: CommandName::FocusLastPane as i32,
+ payload: None,
+ }),
PluginCommand::MoveFocus(direction) => Ok(ProtobufPluginCommand {
name: CommandName::MoveFocus as i32,
payload: Some(Payload::MoveFocusPayload(MovePayload {