diff options
| author | Aram Drevekenin <aram@poor.dev> | 2026-01-20 10:13:37 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-01-20 10:13:37 +0100 |
| commit | 03c86d09cf301db9a62427170f956a632812d67e (patch) | |
| tree | 5eee73d6201cbe2066ec258a0b7612e84e97aa6d /zellij-utils/src/plugin_api/plugin_command.rs | |
| parent | Fix: allow 0% coordinate specification for floating panes (#4609) (diff) | |
| download | sl0ppij-03c86d09cf301db9a62427170f956a632812d67e.tar.gz sl0ppij-03c86d09cf301db9a62427170f956a632812d67e.tar.xz sl0ppij-03c86d09cf301db9a62427170f956a632812d67e.zip | |
Allow toggling pane frames for specific panes (#4615)
* initial implementation
* add borderless to edit and plugin cli commands
* allow changing existing pane to borderless
* allow setting in layouts and keybindings
* get to work through the existing plugin api commands
* fix when applying (swap) layouts
* fix tests
* allow setting pane as bordered (borderful?) when changing its coordinates (eg. through the cli)
* allow explicitly setting a pane as bordered or borderless without toggling
* rustfmt
* adjust snapshots
* docs(changelog): add PR
Diffstat (limited to 'zellij-utils/src/plugin_api/plugin_command.rs')
| -rw-r--r-- | zellij-utils/src/plugin_api/plugin_command.rs | 49 |
1 files changed, 46 insertions, 3 deletions
diff --git a/zellij-utils/src/plugin_api/plugin_command.rs b/zellij-utils/src/plugin_api/plugin_command.rs index d26ab7ec..da0f4599 100644 --- a/zellij-utils/src/plugin_api/plugin_command.rs +++ b/zellij-utils/src/plugin_api/plugin_command.rs @@ -46,9 +46,10 @@ pub use super::generated_api::api::{ RunActionPayload, RunCommandPayload, SaveLayoutPayload, SaveLayoutResponse as ProtobufSaveLayoutResponse, ScrollDownInPaneIdPayload, ScrollToBottomInPaneIdPayload, ScrollToTopInPaneIdPayload, ScrollUpInPaneIdPayload, - SetFloatingPanePinnedPayload, SetSelfMouseSelectionSupportPayload, SetTimeoutPayload, - ShowCursorPayload, ShowPaneWithIdPayload, StackPanesPayload, SubscribePayload, - SwitchSessionPayload, SwitchTabToPayload, TogglePaneEmbedOrEjectForPaneIdPayload, + SetFloatingPanePinnedPayload, SetPaneBorderlessPayload, + SetSelfMouseSelectionSupportPayload, SetTimeoutPayload, ShowCursorPayload, + ShowPaneWithIdPayload, StackPanesPayload, SubscribePayload, SwitchSessionPayload, + SwitchTabToPayload, TogglePaneBorderlessPayload, TogglePaneEmbedOrEjectForPaneIdPayload, TogglePaneIdFullscreenPayload, UnsubscribePayload, WebRequestPayload, WriteCharsToPaneIdPayload, WriteToPaneIdPayload, }, @@ -117,6 +118,7 @@ impl Into<FloatingPaneCoordinates> for ProtobufFloatingPaneCoordinates { } }), pinned: self.pinned, + borderless: self.borderless, } } } @@ -169,6 +171,7 @@ impl Into<ProtobufFloatingPaneCoordinates> for FloatingPaneCoordinates { None => None, }, pinned: self.pinned, + borderless: self.borderless, } } } @@ -1682,6 +1685,29 @@ impl TryFrom<ProtobufPluginCommand> for PluginCommand { _ => Err("Mismatched payload for ChangeFloatingPanesCoordinates"), } }, + Some(CommandName::TogglePaneBorderless) => match protobuf_plugin_command.payload { + Some(Payload::TogglePaneBorderlessPayload(toggle_payload)) => { + match toggle_payload.pane_id { + Some(pane_id) => { + Ok(PluginCommand::TogglePaneBorderless(pane_id.try_into()?)) + }, + None => Err("Malformed TogglePaneBorderless payload"), + } + }, + _ => Err("Mismatched payload for TogglePaneBorderless"), + }, + Some(CommandName::SetPaneBorderless) => match protobuf_plugin_command.payload { + Some(Payload::SetPaneBorderlessPayload(payload)) => { + match (payload.pane_id, payload.borderless) { + (Some(pane_id), borderless) => Ok(PluginCommand::SetPaneBorderless( + pane_id.try_into()?, + borderless, + )), + _ => Err("Malformed SetPaneBorderless payload"), + } + }, + _ => Err("Mismatched payload for SetPaneBorderless"), + }, Some(CommandName::OpenCommandPaneNearPlugin) => match protobuf_plugin_command.payload { Some(Payload::OpenCommandPaneNearPluginPayload(command_to_run_payload)) => { match command_to_run_payload.command_to_run { @@ -3067,6 +3093,23 @@ impl TryFrom<PluginCommand> for ProtobufPluginCommand { }, )), }), + PluginCommand::TogglePaneBorderless(pane_id) => Ok(ProtobufPluginCommand { + name: CommandName::TogglePaneBorderless as i32, + payload: Some(Payload::TogglePaneBorderlessPayload( + TogglePaneBorderlessPayload { + pane_id: Some(pane_id.try_into()?), + }, + )), + }), + PluginCommand::SetPaneBorderless(pane_id, borderless) => Ok(ProtobufPluginCommand { + name: CommandName::SetPaneBorderless as i32, + payload: Some(Payload::SetPaneBorderlessPayload( + SetPaneBorderlessPayload { + pane_id: Some(pane_id.try_into()?), + borderless, + }, + )), + }), PluginCommand::OpenCommandPaneNearPlugin(command_to_run, context) => { let context: Vec<_> = context .into_iter() |
