diff options
| author | Aram Drevekenin <aram@poor.dev> | 2024-12-16 16:03:20 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-12-16 16:03:20 +0100 |
| commit | dd291e2a1f9b4ee3eb1a947e1501a54b10663ea7 (patch) | |
| tree | 0ae41e8175d2a3fd260b3c510a30502f6386ac7f /zellij-utils/src/plugin_api/plugin_command.rs | |
| parent | docs(changelog): multiplayer cursor fix (diff) | |
| download | sl0ppij-dd291e2a1f9b4ee3eb1a947e1501a54b10663ea7.tar.gz sl0ppij-dd291e2a1f9b4ee3eb1a947e1501a54b10663ea7.tar.xz sl0ppij-dd291e2a1f9b4ee3eb1a947e1501a54b10663ea7.zip | |
feat(ux): pin floating panes (#3876)
* working
* ui indication
* add keybinding
* add to plugin panes
* fix with multiple cursors
* toggle with the mouse
* fix e2e tests and add new one
* some cleanups
* add to layouts
* make mouse click more lenient
* allow setting a new floating pane as pinned
* make toggle work throughthe command line
* add to plugin api
* get tests to pass
* style(fmt): rustfmt
Diffstat (limited to 'zellij-utils/src/plugin_api/plugin_command.rs')
| -rw-r--r-- | zellij-utils/src/plugin_api/plugin_command.rs | 36 |
1 files changed, 32 insertions, 4 deletions
diff --git a/zellij-utils/src/plugin_api/plugin_command.rs b/zellij-utils/src/plugin_api/plugin_command.rs index 4317a02e..9d92f260 100644 --- a/zellij-utils/src/plugin_api/plugin_command.rs +++ b/zellij-utils/src/plugin_api/plugin_command.rs @@ -18,10 +18,10 @@ pub use super::generated_api::api::{ RebindKeysPayload, ReconfigurePayload, ReloadPluginPayload, RequestPluginPermissionPayload, RerunCommandPanePayload, ResizePaneIdWithDirectionPayload, ResizePayload, RunCommandPayload, ScrollDownInPaneIdPayload, ScrollToBottomInPaneIdPayload, - ScrollToTopInPaneIdPayload, ScrollUpInPaneIdPayload, SetTimeoutPayload, - ShowPaneWithIdPayload, SubscribePayload, SwitchSessionPayload, SwitchTabToPayload, - TogglePaneEmbedOrEjectForPaneIdPayload, TogglePaneIdFullscreenPayload, UnsubscribePayload, - WebRequestPayload, WriteCharsToPaneIdPayload, WriteToPaneIdPayload, + ScrollToTopInPaneIdPayload, ScrollUpInPaneIdPayload, SetFloatingPanePinnedPayload, + SetTimeoutPayload, ShowPaneWithIdPayload, SubscribePayload, SwitchSessionPayload, + SwitchTabToPayload, TogglePaneEmbedOrEjectForPaneIdPayload, TogglePaneIdFullscreenPayload, + UnsubscribePayload, WebRequestPayload, WriteCharsToPaneIdPayload, WriteToPaneIdPayload, }, plugin_permission::PermissionType as ProtobufPermissionType, resize::ResizeAction as ProtobufResizeAction, @@ -81,6 +81,7 @@ impl Into<FloatingPaneCoordinates> for ProtobufFloatingPaneCoordinates { None => None, } }), + pinned: self.pinned, } } } @@ -132,6 +133,7 @@ impl Into<ProtobufFloatingPaneCoordinates> for FloatingPaneCoordinates { }), None => None, }, + pinned: self.pinned, } } } @@ -1311,6 +1313,21 @@ impl TryFrom<ProtobufPluginCommand> for PluginCommand { }, _ => Err("Mismatched payload for ChangeHostFolder"), }, + Some(CommandName::SetFloatingPanePinned) => match protobuf_plugin_command.payload { + Some(Payload::SetFloatingPanePinnedPayload(set_floating_pane_pinned_payload)) => { + match set_floating_pane_pinned_payload + .pane_id + .and_then(|p| p.try_into().ok()) + { + Some(pane_id) => Ok(PluginCommand::SetFloatingPanePinned( + pane_id, + set_floating_pane_pinned_payload.should_be_pinned, + )), + None => Err("PaneId not found!"), + } + }, + _ => Err("Mismatched payload for SetFloatingPanePinned"), + }, None => Err("Unrecognized plugin command"), } } @@ -2144,6 +2161,17 @@ impl TryFrom<PluginCommand> for ProtobufPluginCommand { new_host_folder: new_host_folder.display().to_string(), // TODO: not accurate? })), }), + PluginCommand::SetFloatingPanePinned(pane_id, should_be_pinned) => { + Ok(ProtobufPluginCommand { + name: CommandName::SetFloatingPanePinned as i32, + payload: Some(Payload::SetFloatingPanePinnedPayload( + SetFloatingPanePinnedPayload { + pane_id: pane_id.try_into().ok(), + should_be_pinned, + }, + )), + }) + }, } } } |
