aboutsummaryrefslogtreecommitdiffstats
path: root/zellij-utils/src/plugin_api/plugin_command.rs
diff options
context:
space:
mode:
authorAram Drevekenin <aram@poor.dev>2024-08-29 17:35:21 +0200
committerGitHub <noreply@github.com>2024-08-29 17:35:21 +0200
commit1776d240dade5ef1d254651ba53d0ab6d99e10ff (patch)
treece86a9254abdd7d21682999d81111cf2443db09e /zellij-utils/src/plugin_api/plugin_command.rs
parentdocs(changelog): reload config options at runtime (diff)
downloadsl0ppij-1776d240dade5ef1d254651ba53d0ab6d99e10ff.tar.gz
sl0ppij-1776d240dade5ef1d254651ba53d0ab6d99e10ff.tar.xz
sl0ppij-1776d240dade5ef1d254651ba53d0ab6d99e10ff.zip
feat(plugins): add plugin APIs to affect other panes (#3576)
* resize_pane_with_id and close_pane_with_id * focus_pane_with_id and edit_scrollback_for_pane_with_id * write_to_pane_id and write_chars_to_pane_id * lots more commands * style(fmt): rustfmt
Diffstat (limited to 'zellij-utils/src/plugin_api/plugin_command.rs')
-rw-r--r--zellij-utils/src/plugin_api/plugin_command.rs333
1 files changed, 325 insertions, 8 deletions
diff --git a/zellij-utils/src/plugin_api/plugin_command.rs b/zellij-utils/src/plugin_api/plugin_command.rs
index 4ffabbe4..155907d3 100644
--- a/zellij-utils/src/plugin_api/plugin_command.rs
+++ b/zellij-utils/src/plugin_api/plugin_command.rs
@@ -3,17 +3,23 @@ pub use super::generated_api::api::{
event::{EventNameList as ProtobufEventNameList, Header},
input_mode::InputMode as ProtobufInputMode,
plugin_command::{
- plugin_command::Payload, CliPipeOutputPayload, CommandName, ContextItem, EnvVariable,
- ExecCmdPayload, FixedOrPercent as ProtobufFixedOrPercent,
+ plugin_command::Payload, ClearScreenForPaneIdPayload, CliPipeOutputPayload,
+ CloseTabWithIndexPayload, CommandName, ContextItem, EditScrollbackForPaneWithIdPayload,
+ EnvVariable, ExecCmdPayload, FixedOrPercent as ProtobufFixedOrPercent,
FixedOrPercentValue as ProtobufFixedOrPercentValue,
FloatingPaneCoordinates as ProtobufFloatingPaneCoordinates, HidePaneWithIdPayload,
HttpVerb as ProtobufHttpVerb, IdAndNewName, KillSessionsPayload, MessageToPluginPayload,
- MovePayload, NewPluginArgs as ProtobufNewPluginArgs, NewTabsWithLayoutInfoPayload,
- OpenCommandPanePayload, OpenFilePayload, PaneId as ProtobufPaneId,
- PaneType as ProtobufPaneType, PluginCommand as ProtobufPluginCommand, PluginMessagePayload,
- ReconfigurePayload, RequestPluginPermissionPayload, RerunCommandPanePayload, ResizePayload,
- RunCommandPayload, SetTimeoutPayload, ShowPaneWithIdPayload, SubscribePayload,
- SwitchSessionPayload, SwitchTabToPayload, UnsubscribePayload, WebRequestPayload,
+ MovePaneWithPaneIdInDirectionPayload, MovePaneWithPaneIdPayload, MovePayload,
+ NewPluginArgs as ProtobufNewPluginArgs, NewTabsWithLayoutInfoPayload,
+ OpenCommandPanePayload, OpenFilePayload, PageScrollDownInPaneIdPayload,
+ PageScrollUpInPaneIdPayload, PaneId as ProtobufPaneId, PaneType as ProtobufPaneType,
+ PluginCommand as ProtobufPluginCommand, PluginMessagePayload, ReconfigurePayload,
+ RequestPluginPermissionPayload, RerunCommandPanePayload, ResizePaneIdWithDirectionPayload,
+ ResizePayload, RunCommandPayload, ScrollDownInPaneIdPayload, ScrollToBottomInPaneIdPayload,
+ ScrollToTopInPaneIdPayload, ScrollUpInPaneIdPayload, SetTimeoutPayload,
+ ShowPaneWithIdPayload, SubscribePayload, SwitchSessionPayload, SwitchTabToPayload,
+ TogglePaneEmbedOrEjectForPaneIdPayload, TogglePaneIdFullscreenPayload, UnsubscribePayload,
+ WebRequestPayload, WriteCharsToPaneIdPayload, WriteToPaneIdPayload,
},
plugin_permission::PermissionType as ProtobufPermissionType,
resize::ResizeAction as ProtobufResizeAction,
@@ -991,6 +997,183 @@ impl TryFrom<ProtobufPluginCommand> for PluginCommand {
),
_ => Err("Mismatched payload for RerunCommandPane"),
},
+ Some(CommandName::ResizePaneIdWithDirection) => match protobuf_plugin_command.payload {
+ Some(Payload::ResizePaneIdWithDirectionPayload(resize_with_direction_payload)) => {
+ match (
+ resize_with_direction_payload.resize,
+ resize_with_direction_payload.pane_id,
+ ) {
+ (Some(resize), Some(pane_id)) => {
+ Ok(PluginCommand::ResizePaneIdWithDirection(
+ resize.try_into()?,
+ pane_id.try_into()?,
+ ))
+ },
+ _ => Err("Malformed resize_pane_with_id payload"),
+ }
+ },
+ _ => Err("Mismatched payload for Resize"),
+ },
+ Some(CommandName::EditScrollbackForPaneWithId) => match protobuf_plugin_command.payload
+ {
+ Some(Payload::EditScrollbackForPaneWithIdPayload(
+ edit_scrollback_for_pane_with_id_payload,
+ )) => match edit_scrollback_for_pane_with_id_payload.pane_id {
+ Some(pane_id) => Ok(PluginCommand::EditScrollbackForPaneWithId(
+ pane_id.try_into()?,
+ )),
+ _ => Err("Malformed edit_scrollback_for_pane_with_id payload"),
+ },
+ _ => Err("Mismatched payload for EditScrollback"),
+ },
+ Some(CommandName::WriteToPaneId) => match protobuf_plugin_command.payload {
+ Some(Payload::WriteToPaneIdPayload(write_to_pane_id_payload)) => {
+ match write_to_pane_id_payload.pane_id {
+ Some(pane_id) => Ok(PluginCommand::WriteToPaneId(
+ write_to_pane_id_payload.bytes_to_write,
+ pane_id.try_into()?,
+ )),
+ _ => Err("Malformed write_to_pane_id payload"),
+ }
+ },
+ _ => Err("Mismatched payload for WriteToPaneId"),
+ },
+ Some(CommandName::WriteCharsToPaneId) => match protobuf_plugin_command.payload {
+ Some(Payload::WriteCharsToPaneIdPayload(write_chars_to_pane_id_payload)) => {
+ match write_chars_to_pane_id_payload.pane_id {
+ Some(pane_id) => Ok(PluginCommand::WriteCharsToPaneId(
+ write_chars_to_pane_id_payload.chars_to_write,
+ pane_id.try_into()?,
+ )),
+ _ => Err("Malformed write_chars_to_pane_id payload"),
+ }
+ },
+ _ => Err("Mismatched payload for WriteCharsCharsToPaneId"),
+ },
+ Some(CommandName::MovePaneWithPaneId) => match protobuf_plugin_command.payload {
+ Some(Payload::MovePaneWithPaneIdPayload(move_pane_with_pane_id_payload)) => {
+ match move_pane_with_pane_id_payload.pane_id {
+ Some(pane_id) => Ok(PluginCommand::MovePaneWithPaneId(pane_id.try_into()?)),
+ _ => Err("Malformed move_pane_with_pane_id payload"),
+ }
+ },
+ _ => Err("Mismatched payload for MovePaneWithPaneId"),
+ },
+ Some(CommandName::MovePaneWithPaneIdInDirection) => {
+ match protobuf_plugin_command.payload {
+ Some(Payload::MovePaneWithPaneIdInDirectionPayload(move_payload)) => {
+ match (move_payload.direction, move_payload.pane_id) {
+ (Some(direction), Some(pane_id)) => {
+ Ok(PluginCommand::MovePaneWithPaneIdInDirection(
+ pane_id.try_into()?,
+ direction.try_into()?,
+ ))
+ },
+ _ => Err("Malformed MovePaneWithPaneIdInDirection payload"),
+ }
+ },
+ _ => Err("Mismatched payload for MovePaneWithDirection"),
+ }
+ },
+ Some(CommandName::ClearScreenForPaneId) => match protobuf_plugin_command.payload {
+ Some(Payload::ClearScreenForPaneIdPayload(clear_screen_for_pane_id_payload)) => {
+ match clear_screen_for_pane_id_payload.pane_id {
+ Some(pane_id) => {
+ Ok(PluginCommand::ClearScreenForPaneId(pane_id.try_into()?))
+ },
+ _ => Err("Malformed clear_screen_for_pane_id_payload payload"),
+ }
+ },
+ _ => Err("Mismatched payload for ClearScreenForPaneId"),
+ },
+ Some(CommandName::ScrollUpInPaneId) => match protobuf_plugin_command.payload {
+ Some(Payload::ScrollUpInPaneIdPayload(scroll_up_in_pane_id_payload)) => {
+ match scroll_up_in_pane_id_payload.pane_id {
+ Some(pane_id) => Ok(PluginCommand::ScrollUpInPaneId(pane_id.try_into()?)),
+ _ => Err("Malformed scroll_up_in_pane_id_payload payload"),
+ }
+ },
+ _ => Err("Mismatched payload for ScrollUpInPaneId"),
+ },
+ Some(CommandName::ScrollDownInPaneId) => match protobuf_plugin_command.payload {
+ Some(Payload::ScrollDownInPaneIdPayload(scroll_down_in_pane_id_payload)) => {
+ match scroll_down_in_pane_id_payload.pane_id {
+ Some(pane_id) => Ok(PluginCommand::ScrollDownInPaneId(pane_id.try_into()?)),
+ _ => Err("Malformed scroll_down_in_pane_id_payload payload"),
+ }
+ },
+ _ => Err("Mismatched payload for ScrollDownInPaneId"),
+ },
+ Some(CommandName::ScrollToTopInPaneId) => match protobuf_plugin_command.payload {
+ Some(Payload::ScrollToTopInPaneIdPayload(scroll_to_top_in_pane_id_payload)) => {
+ match scroll_to_top_in_pane_id_payload.pane_id {
+ Some(pane_id) => {
+ Ok(PluginCommand::ScrollToTopInPaneId(pane_id.try_into()?))
+ },
+ _ => Err("Malformed scroll_to_top_in_pane_id_payload payload"),
+ }
+ },
+ _ => Err("Mismatched payload for ScrollToTopInPaneId"),
+ },
+ Some(CommandName::ScrollToBottomInPaneId) => match protobuf_plugin_command.payload {
+ Some(Payload::ScrollToBottomInPaneIdPayload(
+ scroll_to_bottom_in_pane_id_payload,
+ )) => match scroll_to_bottom_in_pane_id_payload.pane_id {
+ Some(pane_id) => Ok(PluginCommand::ScrollToBottomInPaneId(pane_id.try_into()?)),
+ _ => Err("Malformed scroll_to_bottom_in_pane_id_payload payload"),
+ },
+ _ => Err("Mismatched payload for ScrollToBottomInPaneId"),
+ },
+ Some(CommandName::PageScrollUpInPaneId) => match protobuf_plugin_command.payload {
+ Some(Payload::PageScrollUpInPaneIdPayload(page_scroll_up_in_pane_id_payload)) => {
+ match page_scroll_up_in_pane_id_payload.pane_id {
+ Some(pane_id) => {
+ Ok(PluginCommand::PageScrollUpInPaneId(pane_id.try_into()?))
+ },
+ _ => Err("Malformed page_scroll_up_in_pane_id_payload payload"),
+ }
+ },
+ _ => Err("Mismatched payload for PageScrollUpInPaneId"),
+ },
+ Some(CommandName::PageScrollDownInPaneId) => match protobuf_plugin_command.payload {
+ Some(Payload::PageScrollDownInPaneIdPayload(
+ page_scroll_down_in_pane_id_payload,
+ )) => match page_scroll_down_in_pane_id_payload.pane_id {
+ Some(pane_id) => Ok(PluginCommand::PageScrollDownInPaneId(pane_id.try_into()?)),
+ _ => Err("Malformed page_scroll_down_in_pane_id_payload payload"),
+ },
+ _ => Err("Mismatched payload for PageScrollDownInPaneId"),
+ },
+ Some(CommandName::TogglePaneIdFullscreen) => match protobuf_plugin_command.payload {
+ Some(Payload::TogglePaneIdFullscreenPayload(toggle_pane_id_fullscreen_payload)) => {
+ match toggle_pane_id_fullscreen_payload.pane_id {
+ Some(pane_id) => {
+ Ok(PluginCommand::TogglePaneIdFullscreen(pane_id.try_into()?))
+ },
+ _ => Err("Malformed toggle_pane_id_fullscreen_payload payload"),
+ }
+ },
+ _ => Err("Mismatched payload for TogglePaneIdFullscreen"),
+ },
+ Some(CommandName::TogglePaneEmbedOrEjectForPaneId) => {
+ match protobuf_plugin_command.payload {
+ Some(Payload::TogglePaneEmbedOrEjectForPaneIdPayload(
+ toggle_pane_embed_or_eject_payload,
+ )) => match toggle_pane_embed_or_eject_payload.pane_id {
+ Some(pane_id) => Ok(PluginCommand::TogglePaneEmbedOrEjectForPaneId(
+ pane_id.try_into()?,
+ )),
+ _ => Err("Malformed toggle_pane_embed_or_eject_payload payload"),
+ },
+ _ => Err("Mismatched payload for TogglePaneEmbedOrEjectForPaneId"),
+ }
+ },
+ Some(CommandName::CloseTabWithIndex) => match protobuf_plugin_command.payload {
+ Some(Payload::CloseTabWithIndexPayload(close_tab_index_payload)) => Ok(
+ PluginCommand::CloseTabWithIndex(close_tab_index_payload.tab_index as usize),
+ ),
+ _ => Err("Mismatched payload for CloseTabWithIndex"),
+ },
None => Err("Unrecognized plugin command"),
}
}
@@ -1605,6 +1788,140 @@ impl TryFrom<PluginCommand> for ProtobufPluginCommand {
terminal_pane_id,
})),
}),
+ PluginCommand::ResizePaneIdWithDirection(resize, pane_id) => {
+ Ok(ProtobufPluginCommand {
+ name: CommandName::ResizePaneIdWithDirection as i32,
+ payload: Some(Payload::ResizePaneIdWithDirectionPayload(
+ ResizePaneIdWithDirectionPayload {
+ resize: Some(resize.try_into()?),
+ pane_id: Some(pane_id.try_into()?),
+ },
+ )),
+ })
+ },
+ PluginCommand::EditScrollbackForPaneWithId(pane_id) => Ok(ProtobufPluginCommand {
+ name: CommandName::EditScrollbackForPaneWithId as i32,
+ payload: Some(Payload::EditScrollbackForPaneWithIdPayload(
+ EditScrollbackForPaneWithIdPayload {
+ pane_id: Some(pane_id.try_into()?),
+ },
+ )),
+ }),
+ PluginCommand::WriteToPaneId(bytes_to_write, pane_id) => Ok(ProtobufPluginCommand {
+ name: CommandName::WriteToPaneId as i32,
+ payload: Some(Payload::WriteToPaneIdPayload(WriteToPaneIdPayload {
+ bytes_to_write,
+ pane_id: Some(pane_id.try_into()?),
+ })),
+ }),
+ PluginCommand::WriteCharsToPaneId(chars_to_write, pane_id) => {
+ Ok(ProtobufPluginCommand {
+ name: CommandName::WriteCharsToPaneId as i32,
+ payload: Some(Payload::WriteCharsToPaneIdPayload(
+ WriteCharsToPaneIdPayload {
+ chars_to_write,
+ pane_id: Some(pane_id.try_into()?),
+ },
+ )),
+ })
+ },
+ PluginCommand::MovePaneWithPaneId(pane_id) => Ok(ProtobufPluginCommand {
+ name: CommandName::MovePaneWithPaneId as i32,
+ payload: Some(Payload::MovePaneWithPaneIdPayload(
+ MovePaneWithPaneIdPayload {
+ pane_id: Some(pane_id.try_into()?),
+ },
+ )),
+ }),
+ PluginCommand::MovePaneWithPaneIdInDirection(pane_id, direction) => {
+ Ok(ProtobufPluginCommand {
+ name: CommandName::MovePaneWithPaneIdInDirection as i32,
+ payload: Some(Payload::MovePaneWithPaneIdInDirectionPayload(
+ MovePaneWithPaneIdInDirectionPayload {
+ pane_id: Some(pane_id.try_into()?),
+ direction: Some(direction.try_into()?),
+ },
+ )),
+ })
+ },
+ PluginCommand::ClearScreenForPaneId(pane_id) => Ok(ProtobufPluginCommand {
+ name: CommandName::ClearScreenForPaneId as i32,
+ payload: Some(Payload::ClearScreenForPaneIdPayload(
+ ClearScreenForPaneIdPayload {
+ pane_id: Some(pane_id.try_into()?),
+ },
+ )),
+ }),
+ PluginCommand::ScrollUpInPaneId(pane_id) => Ok(ProtobufPluginCommand {
+ name: CommandName::ScrollUpInPaneId as i32,
+ payload: Some(Payload::ScrollUpInPaneIdPayload(ScrollUpInPaneIdPayload {
+ pane_id: Some(pane_id.try_into()?),
+ })),
+ }),
+ PluginCommand::ScrollDownInPaneId(pane_id) => Ok(ProtobufPluginCommand {
+ name: CommandName::ScrollDownInPaneId as i32,
+ payload: Some(Payload::ScrollDownInPaneIdPayload(
+ ScrollDownInPaneIdPayload {
+ pane_id: Some(pane_id.try_into()?),
+ },
+ )),
+ }),
+ PluginCommand::ScrollToTopInPaneId(pane_id) => Ok(ProtobufPluginCommand {
+ name: CommandName::ScrollToTopInPaneId as i32,
+ payload: Some(Payload::ScrollToTopInPaneIdPayload(
+ ScrollToTopInPaneIdPayload {
+ pane_id: Some(pane_id.try_into()?),
+ },
+ )),
+ }),
+ PluginCommand::ScrollToBottomInPaneId(pane_id) => Ok(ProtobufPluginCommand {
+ name: CommandName::ScrollToBottomInPaneId as i32,
+ payload: Some(Payload::ScrollToBottomInPaneIdPayload(
+ ScrollToBottomInPaneIdPayload {
+ pane_id: Some(pane_id.try_into()?),
+ },
+ )),
+ }),
+ PluginCommand::PageScrollUpInPaneId(pane_id) => Ok(ProtobufPluginCommand {
+ name: CommandName::PageScrollUpInPaneId as i32,
+ payload: Some(Payload::PageScrollUpInPaneIdPayload(
+ PageScrollUpInPaneIdPayload {
+ pane_id: Some(pane_id.try_into()?),
+ },
+ )),
+ }),
+ PluginCommand::PageScrollDownInPaneId(pane_id) => Ok(ProtobufPluginCommand {
+ name: CommandName::PageScrollDownInPaneId as i32,
+ payload: Some(Payload::PageScrollDownInPaneIdPayload(
+ PageScrollDownInPaneIdPayload {
+ pane_id: Some(pane_id.try_into()?),
+ },
+ )),
+ }),
+ PluginCommand::TogglePaneIdFullscreen(pane_id) => Ok(ProtobufPluginCommand {
+ name: CommandName::TogglePaneIdFullscreen as i32,
+ payload: Some(Payload::TogglePaneIdFullscreenPayload(
+ TogglePaneIdFullscreenPayload {
+ pane_id: Some(pane_id.try_into()?),
+ },
+ )),
+ }),
+ PluginCommand::TogglePaneEmbedOrEjectForPaneId(pane_id) => Ok(ProtobufPluginCommand {
+ name: CommandName::TogglePaneEmbedOrEjectForPaneId as i32,
+ payload: Some(Payload::TogglePaneEmbedOrEjectForPaneIdPayload(
+ TogglePaneEmbedOrEjectForPaneIdPayload {
+ pane_id: Some(pane_id.try_into()?),
+ },
+ )),
+ }),
+ PluginCommand::CloseTabWithIndex(tab_index) => Ok(ProtobufPluginCommand {
+ name: CommandName::CloseTabWithIndex as i32,
+ payload: Some(Payload::CloseTabWithIndexPayload(
+ CloseTabWithIndexPayload {
+ tab_index: tab_index as u32,
+ },
+ )),
+ }),
}
}
}