aboutsummaryrefslogtreecommitdiffstats
path: root/zellij-utils/src/plugin_api
diff options
context:
space:
mode:
authorAram Drevekenin <aram@poor.dev>2024-12-31 12:37:23 +0100
committerGitHub <noreply@github.com>2024-12-31 12:37:23 +0100
commit42adc8cd048c03d52a9f33503d75e24364adbc68 (patch)
tree943ee11e188e6512b336b603bdd5ea8eae38998b /zellij-utils/src/plugin_api
parentdocs(changelog): cursor overflow fix (diff)
downloadsl0ppij-42adc8cd048c03d52a9f33503d75e24364adbc68.tar.gz
sl0ppij-42adc8cd048c03d52a9f33503d75e24364adbc68.tar.xz
sl0ppij-42adc8cd048c03d52a9f33503d75e24364adbc68.zip
feat(ux): stack panes command (#3905)
* working across tabs and floating panes through the cli * finalize cli command * plugin api * style(fmt): rustfmt * fix: re-focus pane in stack if it was focused * style(fmt): rustfmt * remove outdated comment
Diffstat (limited to 'zellij-utils/src/plugin_api')
-rw-r--r--zellij-utils/src/plugin_api/action.rs1
-rw-r--r--zellij-utils/src/plugin_api/plugin_command.proto6
-rw-r--r--zellij-utils/src/plugin_api/plugin_command.rs28
3 files changed, 32 insertions, 3 deletions
diff --git a/zellij-utils/src/plugin_api/action.rs b/zellij-utils/src/plugin_api/action.rs
index 96385433..e3c05130 100644
--- a/zellij-utils/src/plugin_api/action.rs
+++ b/zellij-utils/src/plugin_api/action.rs
@@ -1301,6 +1301,7 @@ impl TryFrom<Action> for ProtobufAction {
| Action::DumpLayout
| Action::CliPipe { .. }
| Action::ListClients
+ | Action::StackPanes(..)
| Action::SkipConfirm(..) => Err("Unsupported action"),
}
}
diff --git a/zellij-utils/src/plugin_api/plugin_command.proto b/zellij-utils/src/plugin_api/plugin_command.proto
index 14e8a286..7572476d 100644
--- a/zellij-utils/src/plugin_api/plugin_command.proto
+++ b/zellij-utils/src/plugin_api/plugin_command.proto
@@ -129,6 +129,7 @@ enum CommandName {
ListClients = 113;
ChangeHostFolder = 114;
SetFloatingPanePinned = 115;
+ StackPanes = 116;
}
message PluginCommand {
@@ -214,9 +215,14 @@ message PluginCommand {
RebindKeysPayload rebind_keys_payload = 88;
ChangeHostFolderPayload change_host_folder_payload = 89;
SetFloatingPanePinnedPayload set_floating_pane_pinned_payload = 90;
+ StackPanesPayload stack_panes_payload = 91;
}
}
+message StackPanesPayload {
+ repeated PaneId pane_ids = 1;
+}
+
message SetFloatingPanePinnedPayload {
PaneId pane_id = 1;
bool should_be_pinned = 2;
diff --git a/zellij-utils/src/plugin_api/plugin_command.rs b/zellij-utils/src/plugin_api/plugin_command.rs
index 9d92f260..2621502a 100644
--- a/zellij-utils/src/plugin_api/plugin_command.rs
+++ b/zellij-utils/src/plugin_api/plugin_command.rs
@@ -19,9 +19,10 @@ pub use super::generated_api::api::{
RerunCommandPanePayload, ResizePaneIdWithDirectionPayload, ResizePayload,
RunCommandPayload, ScrollDownInPaneIdPayload, ScrollToBottomInPaneIdPayload,
ScrollToTopInPaneIdPayload, ScrollUpInPaneIdPayload, SetFloatingPanePinnedPayload,
- SetTimeoutPayload, ShowPaneWithIdPayload, SubscribePayload, SwitchSessionPayload,
- SwitchTabToPayload, TogglePaneEmbedOrEjectForPaneIdPayload, TogglePaneIdFullscreenPayload,
- UnsubscribePayload, WebRequestPayload, WriteCharsToPaneIdPayload, WriteToPaneIdPayload,
+ SetTimeoutPayload, ShowPaneWithIdPayload, StackPanesPayload, SubscribePayload,
+ SwitchSessionPayload, SwitchTabToPayload, TogglePaneEmbedOrEjectForPaneIdPayload,
+ TogglePaneIdFullscreenPayload, UnsubscribePayload, WebRequestPayload,
+ WriteCharsToPaneIdPayload, WriteToPaneIdPayload,
},
plugin_permission::PermissionType as ProtobufPermissionType,
resize::ResizeAction as ProtobufResizeAction,
@@ -1328,6 +1329,18 @@ impl TryFrom<ProtobufPluginCommand> for PluginCommand {
},
_ => Err("Mismatched payload for SetFloatingPanePinned"),
},
+ Some(CommandName::StackPanes) => match protobuf_plugin_command.payload {
+ Some(Payload::StackPanesPayload(stack_panes_payload)) => {
+ Ok(PluginCommand::StackPanes(
+ stack_panes_payload
+ .pane_ids
+ .into_iter()
+ .filter_map(|p_id| p_id.try_into().ok())
+ .collect(),
+ ))
+ },
+ _ => Err("Mismatched payload for SetFloatingPanePinned"),
+ },
None => Err("Unrecognized plugin command"),
}
}
@@ -2172,6 +2185,15 @@ impl TryFrom<PluginCommand> for ProtobufPluginCommand {
)),
})
},
+ PluginCommand::StackPanes(pane_ids) => Ok(ProtobufPluginCommand {
+ name: CommandName::StackPanes as i32,
+ payload: Some(Payload::StackPanesPayload(StackPanesPayload {
+ pane_ids: pane_ids
+ .into_iter()
+ .filter_map(|p_id| p_id.try_into().ok())
+ .collect(),
+ })),
+ }),
}
}
}