aboutsummaryrefslogtreecommitdiffstats
path: root/zellij-utils/src/plugin_api/plugin_command.rs
diff options
context:
space:
mode:
authorAram Drevekenin <aram@poor.dev>2024-12-16 16:03:20 +0100
committerGitHub <noreply@github.com>2024-12-16 16:03:20 +0100
commitdd291e2a1f9b4ee3eb1a947e1501a54b10663ea7 (patch)
tree0ae41e8175d2a3fd260b3c510a30502f6386ac7f /zellij-utils/src/plugin_api/plugin_command.rs
parentdocs(changelog): multiplayer cursor fix (diff)
downloadsl0ppij-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.rs36
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,
+ },
+ )),
+ })
+ },
}
}
}