diff options
| author | Aram Drevekenin <aram@poor.dev> | 2024-08-29 17:35:21 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-08-29 17:35:21 +0200 |
| commit | 1776d240dade5ef1d254651ba53d0ab6d99e10ff (patch) | |
| tree | ce86a9254abdd7d21682999d81111cf2443db09e /zellij-utils/src/plugin_api/plugin_command.rs | |
| parent | docs(changelog): reload config options at runtime (diff) | |
| download | sl0ppij-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.rs | 333 |
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, + }, + )), + }), } } } |
