aboutsummaryrefslogtreecommitdiffstats
path: root/zellij-utils/src/plugin_api/plugin_command.rs
diff options
context:
space:
mode:
authorAram Drevekenin <aram@poor.dev>2025-10-09 11:29:55 +0200
committerGitHub <noreply@github.com>2025-10-09 11:29:55 +0200
commit7e66ae3125bf5031b6c013dee8038c838b42bbc5 (patch)
tree061c2311461cbe52b40b8ad433023085cfae67bf /zellij-utils/src/plugin_api/plugin_command.rs
parentbuild(cargo): Update Rust toolchain to 1.90.0 (#4457) (diff)
downloadsl0ppij-7e66ae3125bf5031b6c013dee8038c838b42bbc5.tar.gz
sl0ppij-7e66ae3125bf5031b6c013dee8038c838b42bbc5.tar.xz
sl0ppij-7e66ae3125bf5031b6c013dee8038c838b42bbc5.zip
Give plugins the ability to read pane contents (#4465)
* initial implementation * add Selection and better types * event to plugins * only send viewport diff * simplify data structure sent over the wire * cleanups * rustfmt * remove dead code and fix tests * commit tests * get pane scrollback plugin command without implementation * add lines above and lines below to pane contents * implement get scrollback plugin command * selection => selected_text * add convenience method to get the selected text * move Selection back to zellij-server * rustfmt * bring back client id to get contents command * rustfmt * add pr
Diffstat (limited to 'zellij-utils/src/plugin_api/plugin_command.rs')
-rw-r--r--zellij-utils/src/plugin_api/plugin_command.rs40
1 files changed, 32 insertions, 8 deletions
diff --git a/zellij-utils/src/plugin_api/plugin_command.rs b/zellij-utils/src/plugin_api/plugin_command.rs
index 4fc9d939..c1ba877e 100644
--- a/zellij-utils/src/plugin_api/plugin_command.rs
+++ b/zellij-utils/src/plugin_api/plugin_command.rs
@@ -12,14 +12,14 @@ pub use super::generated_api::api::{
FixedOrPercent as ProtobufFixedOrPercent,
FixedOrPercentValue as ProtobufFixedOrPercentValue, FloatMultiplePanesPayload,
FloatingPaneCoordinates as ProtobufFloatingPaneCoordinates, GenerateWebLoginTokenPayload,
- GroupAndUngroupPanesPayload, HidePaneWithIdPayload, HighlightAndUnhighlightPanesPayload,
- HttpVerb as ProtobufHttpVerb, IdAndNewName, KeyToRebind, KeyToUnbind, KillSessionsPayload,
- ListTokensResponse, LoadNewPluginPayload, MessageToPluginPayload,
- MovePaneWithPaneIdInDirectionPayload, MovePaneWithPaneIdPayload, MovePayload,
- NewPluginArgs as ProtobufNewPluginArgs, NewTabPayload, NewTabsWithLayoutInfoPayload,
- OpenCommandPaneFloatingNearPluginPayload, OpenCommandPaneInPlaceOfPluginPayload,
- OpenCommandPaneNearPluginPayload, OpenCommandPanePayload,
- OpenFileFloatingNearPluginPayload, OpenFileInPlaceOfPluginPayload,
+ GetPaneScrollbackPayload, GroupAndUngroupPanesPayload, HidePaneWithIdPayload,
+ HighlightAndUnhighlightPanesPayload, HttpVerb as ProtobufHttpVerb, IdAndNewName,
+ KeyToRebind, KeyToUnbind, KillSessionsPayload, ListTokensResponse, LoadNewPluginPayload,
+ MessageToPluginPayload, MovePaneWithPaneIdInDirectionPayload, MovePaneWithPaneIdPayload,
+ MovePayload, NewPluginArgs as ProtobufNewPluginArgs, NewTabPayload,
+ NewTabsWithLayoutInfoPayload, OpenCommandPaneFloatingNearPluginPayload,
+ OpenCommandPaneInPlaceOfPluginPayload, OpenCommandPaneNearPluginPayload,
+ OpenCommandPanePayload, OpenFileFloatingNearPluginPayload, OpenFileInPlaceOfPluginPayload,
OpenFileNearPluginPayload, OpenFilePayload, OpenTerminalFloatingNearPluginPayload,
OpenTerminalInPlaceOfPluginPayload, OpenTerminalNearPluginPayload,
PageScrollDownInPaneIdPayload, PageScrollUpInPaneIdPayload, PaneId as ProtobufPaneId,
@@ -1109,6 +1109,18 @@ impl TryFrom<ProtobufPluginCommand> for PluginCommand {
},
_ => Err("Mismatched payload for EditScrollback"),
},
+ Some(CommandName::GetPaneScrollback) => match protobuf_plugin_command.payload {
+ Some(Payload::GetPaneScrollbackPayload(get_pane_scrollback_payload)) => {
+ match get_pane_scrollback_payload.pane_id {
+ Some(pane_id) => Ok(PluginCommand::GetPaneScrollback {
+ pane_id: pane_id.try_into()?,
+ get_full_scrollback: get_pane_scrollback_payload.get_full_scrollback,
+ }),
+ _ => Err("Malformed get_pane_scrollback_payload"),
+ }
+ },
+ _ => Err("Mismatched payload for GetPaneScrollback"),
+ },
Some(CommandName::WriteToPaneId) => match protobuf_plugin_command.payload {
Some(Payload::WriteToPaneIdPayload(write_to_pane_id_payload)) => {
match write_to_pane_id_payload.pane_id {
@@ -2373,6 +2385,18 @@ impl TryFrom<PluginCommand> for ProtobufPluginCommand {
},
)),
}),
+ PluginCommand::GetPaneScrollback {
+ pane_id,
+ get_full_scrollback,
+ } => Ok(ProtobufPluginCommand {
+ name: CommandName::GetPaneScrollback as i32,
+ payload: Some(Payload::GetPaneScrollbackPayload(
+ GetPaneScrollbackPayload {
+ pane_id: Some(pane_id.try_into()?),
+ get_full_scrollback,
+ },
+ )),
+ }),
PluginCommand::WriteToPaneId(bytes_to_write, pane_id) => Ok(ProtobufPluginCommand {
name: CommandName::WriteToPaneId as i32,
payload: Some(Payload::WriteToPaneIdPayload(WriteToPaneIdPayload {