zellij/zellij-utils/src/plugin_api/plugin_command.proto
Aram Drevekenin 11015c8fe4
feat(plugin-api): allow replacing pane with existing pane (#4246)
* work

* make the api work

* some cleanups

* close pane

* style(fmt): rustfmt
2025-06-26 13:51:17 +02:00

697 lines
19 KiB
Protocol Buffer

syntax = "proto3";
import "action.proto";
import "event.proto";
import "file.proto";
import "command.proto";
import "message.proto";
import "resize.proto";
import "plugin_permission.proto";
import "input_mode.proto";
import "key.proto";
package api.plugin_command;
enum CommandName {
Subscribe = 0;
Unsubscribe = 1;
SetSelectable = 2;
GetPluginIds = 3;
GetZellijVersion = 4;
OpenFile = 5;
OpenFileFloating = 6;
OpenTerminal = 7;
OpenTerminalFloating = 8;
OpenCommandPane = 9;
OpenCommandPaneFloating = 10;
SwitchTabTo = 11;
SetTimeout = 12;
ExecCmd = 13;
PostMessageTo = 14;
PostMessageToPlugin = 15;
HideSelf = 16;
ShowSelf = 17;
SwitchToMode = 18;
NewTabsWithLayout = 19;
NewTab = 20;
GoToNextTab = 21;
GoToPreviousTab = 22;
Resize = 23;
ResizeWithDirection = 24;
FocusNextPane = 25;
FocusPreviousPane = 26;
MoveFocus = 27;
MoveFocusOrTab = 28;
Detach = 29;
EditScrollback = 30;
Write = 31;
WriteChars = 32;
ToggleTab = 33;
MovePane = 34;
MovePaneWithDirection = 35;
ClearScreen = 36;
ScrollUp = 37;
ScrollDown = 38;
ScrollToTop = 39;
ScrollToBottom = 40;
PageScrollUp = 41;
PageScrollDown = 42;
ToggleFocusFullscreen = 43;
TogglePaneFrames = 44;
TogglePaneEmbedOrEject = 45;
UndoRenamePane = 46;
CloseFocus = 47;
ToggleActiveTabSync = 48;
CloseFocusedTab = 49;
UndoRenameTab = 50;
QuitZellij = 51;
PreviousSwapLayout = 52;
NextSwapLayout = 53;
GoToTabName = 54;
FocusOrCreateTab = 55;
GoToTab = 56;
StartOrReloadPlugin = 57;
CloseTerminalPane = 58;
ClosePluginPane = 59;
FocusTerminalPane = 60;
FocusPluginPane = 61;
RenameTerminalPane = 62;
RenamePluginPane = 63;
RenameTab = 64;
ReportCrash = 65;
RequestPluginPermissions = 66;
SwitchSession = 67;
OpenTerminalInPlace = 68;
OpenCommandInPlace = 69;
OpenFileInPlace = 70;
RunCommand = 71;
WebRequest = 72;
DeleteDeadSession = 73;
DeleteAllDeadSessions = 74;
RenameSession = 75;
UnblockCliPipeInput = 76;
BlockCliPipeInput = 77;
CliPipeOutput = 78;
MessageToPlugin = 79;
DisconnectOtherClients = 80;
KillSessions = 81;
ScanHostFolder = 82;
WatchFilesystem = 83;
DumpSessionLayout = 84;
CloseSelf = 85;
NewTabsWithLayoutInfo = 86;
Reconfigure = 87;
HidePaneWithId = 88;
ShowPaneWithId = 89;
OpenCommandPaneBackground = 90;
RerunCommandPane = 91;
ResizePaneIdWithDirection = 92;
EditScrollbackForPaneWithId = 93;
WriteToPaneId = 94;
WriteCharsToPaneId = 95;
MovePaneWithPaneId = 96;
MovePaneWithPaneIdInDirection = 97;
ClearScreenForPaneId = 98;
ScrollUpInPaneId = 99;
ScrollDownInPaneId = 100;
ScrollToTopInPaneId = 101;
ScrollToBottomInPaneId = 102;
PageScrollUpInPaneId = 103;
PageScrollDownInPaneId = 104;
TogglePaneIdFullscreen = 105;
TogglePaneEmbedOrEjectForPaneId = 106;
CloseTabWithIndex = 107;
BreakPanesToNewTab = 108;
BreakPanesToTabWithIndex = 109;
ReloadPlugin = 110;
LoadNewPlugin = 111;
RebindKeys = 112;
ListClients = 113;
ChangeHostFolder = 114;
SetFloatingPanePinned = 115;
StackPanes = 116;
ChangeFloatingPanesCoordinates = 117;
OpenCommandPaneNearPlugin = 118;
OpenTerminalNearPlugin = 119;
OpenTerminalFloatingNearPlugin = 120;
OpenTerminalInPlaceOfPlugin = 121;
OpenCommandPaneFloatingNearPlugin = 122;
OpenCommandPaneInPlaceOfPlugin = 123;
OpenFileNearPlugin = 124;
OpenFileFloatingNearPlugin = 125;
OpenFileInPlaceOfPlugin = 126;
StartWebServer = 127;
GroupAndUngroupPanes = 128;
HighlightAndUnhighlightPanes = 129;
CloseMultiplePanes = 130;
FloatMultiplePanes = 131;
EmbedMultiplePanes = 132;
ShareCurrentSession = 133;
StopSharingCurrentSession = 134;
StopWebServer = 135;
QueryWebServerStatus = 136;
SetSelfMouseSelectionSupport = 137;
GenerateWebLoginToken = 138;
RevokeWebLoginToken = 139;
ListWebLoginTokens = 140;
RevokeAllWebLoginTokens = 141;
RenameWebLoginToken = 142;
InterceptKeyPresses = 143;
ClearKeyPressesIntercepts = 144;
ReplacePaneWithExistingPane = 155;
}
message PluginCommand {
CommandName name = 1;
oneof payload {
SubscribePayload subscribe_payload = 2;
UnsubscribePayload unsubscribe_payload = 3;
bool set_selectable_payload = 4;
OpenFilePayload open_file_payload = 5;
OpenFilePayload open_file_floating_payload = 6;
OpenFilePayload open_terminal_payload = 7;
OpenFilePayload open_terminal_floating_payload = 8;
OpenCommandPanePayload open_command_pane_payload = 9;
OpenCommandPanePayload open_command_pane_floating_payload = 10;
SwitchTabToPayload switch_tab_to_payload = 11;
SetTimeoutPayload set_timeout_payload = 12;
ExecCmdPayload exec_cmd_payload = 13;
PluginMessagePayload post_message_to_payload = 14;
PluginMessagePayload post_message_to_plugin_payload = 15;
bool show_self_payload = 16;
action.SwitchToModePayload switch_to_mode_payload = 17;
string new_tabs_with_layout_payload = 18;
ResizePayload resize_payload = 19;
ResizePayload resize_with_direction_payload = 20;
MovePayload move_focus_payload = 21;
MovePayload move_focus_or_tab_payload = 22;
bytes write_payload = 23;
string write_chars_payload = 24;
MovePayload move_pane_with_direction_payload = 25;
string go_to_tab_name_payload = 26;
string focus_or_create_tab_payload = 27;
uint32 go_to_tab_payload = 28;
string start_or_reload_plugin_payload = 29;
uint32 close_terminal_pane_payload = 30;
uint32 close_plugin_pane_payload = 31;
action.PaneIdAndShouldFloat focus_terminal_pane_payload = 32;
action.PaneIdAndShouldFloat focus_plugin_pane_payload = 33;
IdAndNewName rename_terminal_pane_payload = 34;
IdAndNewName rename_plugin_pane_payload = 35;
IdAndNewName rename_tab_payload = 36;
string report_crash_payload = 37;
RequestPluginPermissionPayload request_plugin_permission_payload = 38;
SwitchSessionPayload switch_session_payload = 39;
OpenFilePayload open_file_in_place_payload = 40;
OpenFilePayload open_terminal_in_place_payload = 41;
OpenCommandPanePayload open_command_pane_in_place_payload = 42;
RunCommandPayload run_command_payload = 43;
WebRequestPayload web_request_payload = 44;
string delete_dead_session_payload = 45;
string rename_session_payload = 46;
string unblock_cli_pipe_input_payload = 47;
string block_cli_pipe_input_payload = 48;
CliPipeOutputPayload cli_pipe_output_payload = 49;
MessageToPluginPayload message_to_plugin_payload = 50;
KillSessionsPayload kill_sessions_payload = 60;
string scan_host_folder_payload = 61;
NewTabsWithLayoutInfoPayload new_tabs_with_layout_info_payload = 62;
ReconfigurePayload reconfigure_payload = 63;
HidePaneWithIdPayload hide_pane_with_id_payload = 64;
ShowPaneWithIdPayload show_pane_with_id_payload = 65;
OpenCommandPanePayload open_command_pane_background_payload = 66;
RerunCommandPanePayload rerun_command_pane_payload = 67;
ResizePaneIdWithDirectionPayload resize_pane_id_with_direction_payload = 68;
EditScrollbackForPaneWithIdPayload edit_scrollback_for_pane_with_id_payload = 69;
WriteToPaneIdPayload write_to_pane_id_payload = 70;
WriteCharsToPaneIdPayload write_chars_to_pane_id_payload = 71;
MovePaneWithPaneIdPayload move_pane_with_pane_id_payload = 72;
MovePaneWithPaneIdInDirectionPayload move_pane_with_pane_id_in_direction_payload = 73;
ClearScreenForPaneIdPayload clear_screen_for_pane_id_payload = 74;
ScrollUpInPaneIdPayload scroll_up_in_pane_id_payload = 75;
ScrollDownInPaneIdPayload scroll_down_in_pane_id_payload = 76;
ScrollToTopInPaneIdPayload scroll_to_top_in_pane_id_payload = 77;
ScrollToBottomInPaneIdPayload scroll_to_bottom_in_pane_id_payload = 78;
PageScrollUpInPaneIdPayload page_scroll_up_in_pane_id_payload = 79;
PageScrollDownInPaneIdPayload page_scroll_down_in_pane_id_payload = 80;
TogglePaneIdFullscreenPayload toggle_pane_id_fullscreen_payload = 81;
TogglePaneEmbedOrEjectForPaneIdPayload toggle_pane_embed_or_eject_for_pane_id_payload = 82;
CloseTabWithIndexPayload close_tab_with_index_payload = 83;
BreakPanesToNewTabPayload break_panes_to_new_tab_payload = 84;
BreakPanesToTabWithIndexPayload break_panes_to_tab_with_index_payload = 85;
ReloadPluginPayload reload_plugin_payload = 86;
LoadNewPluginPayload load_new_plugin_payload = 87;
RebindKeysPayload rebind_keys_payload = 88;
ChangeHostFolderPayload change_host_folder_payload = 89;
SetFloatingPanePinnedPayload set_floating_pane_pinned_payload = 90;
StackPanesPayload stack_panes_payload = 91;
ChangeFloatingPanesCoordinatesPayload change_floating_panes_coordinates_payload = 92;
OpenCommandPaneNearPluginPayload open_command_pane_near_plugin_payload = 93;
OpenTerminalNearPluginPayload open_terminal_near_plugin_payload = 94;
OpenTerminalFloatingNearPluginPayload open_terminal_floating_near_plugin_payload = 95;
OpenTerminalInPlaceOfPluginPayload open_terminal_in_place_of_plugin_payload = 96;
OpenCommandPaneFloatingNearPluginPayload open_command_pane_floating_near_plugin_payload = 97;
OpenCommandPaneInPlaceOfPluginPayload open_command_pane_in_place_of_plugin_payload = 98;
OpenFileNearPluginPayload open_file_near_plugin_payload = 99;
OpenFileFloatingNearPluginPayload open_file_floating_near_plugin_payload = 100;
OpenFileInPlaceOfPluginPayload open_file_in_place_of_plugin_payload = 101;
GroupAndUngroupPanesPayload group_and_ungroup_panes_payload = 102;
HighlightAndUnhighlightPanesPayload highlight_and_unhighlight_panes_payload = 103;
CloseMultiplePanesPayload close_multiple_panes_payload = 104;
FloatMultiplePanesPayload float_multiple_panes_payload = 105;
EmbedMultiplePanesPayload embed_multiple_panes_payload = 106;
SetSelfMouseSelectionSupportPayload set_self_mouse_selection_support_payload = 107;
GenerateWebLoginTokenPayload generate_web_login_token_payload = 108;
RevokeWebLoginTokenPayload revoke_web_login_token_payload = 109;
RenameWebLoginTokenPayload rename_web_login_token_payload = 110;
ReplacePaneWithExistingPanePayload replace_pane_with_existing_pane_payload = 111;
}
}
message ReplacePaneWithExistingPanePayload {
PaneId pane_id_to_replace = 1;
PaneId existing_pane_id = 2;
}
message RenameWebLoginTokenPayload {
string old_name = 1;
string new_name = 2;
}
message RevokeWebLoginTokenPayload {
string token_label = 1;
}
message GenerateWebLoginTokenPayload {
optional string token_label = 1;
}
message SetSelfMouseSelectionSupportPayload {
bool support_mouse_selection = 1;
}
message EmbedMultiplePanesPayload {
repeated PaneId pane_ids = 1;
}
message FloatMultiplePanesPayload {
repeated PaneId pane_ids = 1;
}
message CloseMultiplePanesPayload {
repeated PaneId pane_ids = 1;
}
message HighlightAndUnhighlightPanesPayload {
repeated PaneId pane_ids_to_highlight = 1;
repeated PaneId pane_ids_to_unhighlight = 2;
}
message GroupAndUngroupPanesPayload {
repeated PaneId pane_ids_to_group = 1;
repeated PaneId pane_ids_to_ungroup = 2;
}
message OpenFileInPlaceOfPluginPayload {
file.File file_to_open = 1;
optional FloatingPaneCoordinates floating_pane_coordinates = 2;
repeated ContextItem context = 3;
bool close_plugin_after_replace = 4;
}
message OpenFileFloatingNearPluginPayload {
file.File file_to_open = 1;
optional FloatingPaneCoordinates floating_pane_coordinates = 2;
repeated ContextItem context = 3;
}
message OpenFileNearPluginPayload {
file.File file_to_open = 1;
optional FloatingPaneCoordinates floating_pane_coordinates = 2;
repeated ContextItem context = 3;
}
message OpenCommandPaneInPlaceOfPluginPayload {
command.Command command_to_run = 1;
repeated ContextItem context = 3;
bool close_plugin_after_replace = 4;
}
message OpenCommandPaneFloatingNearPluginPayload {
command.Command command_to_run = 1;
optional FloatingPaneCoordinates floating_pane_coordinates = 2;
repeated ContextItem context = 3;
}
message OpenTerminalInPlaceOfPluginPayload {
file.File file_to_open = 1;
repeated ContextItem context = 3;
bool close_plugin_after_replace = 4;
}
message OpenTerminalFloatingNearPluginPayload {
file.File file_to_open = 1;
optional FloatingPaneCoordinates floating_pane_coordinates = 2;
repeated ContextItem context = 3;
}
message OpenTerminalNearPluginPayload {
file.File file_to_open = 1;
repeated ContextItem context = 3;
}
message OpenCommandPaneNearPluginPayload {
command.Command command_to_run = 1;
optional FloatingPaneCoordinates floating_pane_coordinates = 2;
repeated ContextItem context = 3;
}
message ChangeFloatingPanesCoordinatesPayload {
repeated PaneIdAndFloatingPaneCoordinates pane_ids_and_floating_panes_coordinates = 1;
}
message StackPanesPayload {
repeated PaneId pane_ids = 1;
}
message SetFloatingPanePinnedPayload {
PaneId pane_id = 1;
bool should_be_pinned = 2;
}
message ChangeHostFolderPayload {
string new_host_folder = 1;
}
message RebindKeysPayload {
repeated KeyToRebind keys_to_rebind = 1;
repeated KeyToUnbind keys_to_unbind = 2;
bool write_config_to_disk = 3;
}
message KeyToRebind {
input_mode.InputMode input_mode = 1;
key.Key key = 2;
repeated action.Action actions = 3;
}
message KeyToUnbind {
input_mode.InputMode input_mode = 1;
key.Key key = 2;
}
message LoadNewPluginPayload {
string plugin_url = 1;
repeated ContextItem plugin_config = 2;
bool should_load_plugin_in_background = 3;
bool should_skip_plugin_cache = 4;
}
message ReloadPluginPayload {
uint32 plugin_id = 1;
}
message BreakPanesToTabWithIndexPayload {
repeated PaneId pane_ids = 1;
uint32 tab_index = 2;
bool should_change_focus_to_target_tab = 3;
}
message BreakPanesToNewTabPayload {
repeated PaneId pane_ids = 1;
bool should_change_focus_to_new_tab = 2;
optional string new_tab_name = 3;
}
message MovePaneWithPaneIdPayload {
PaneId pane_id = 1;
}
message MovePaneWithPaneIdInDirectionPayload {
PaneId pane_id = 1;
resize.MoveDirection direction = 2;
}
message ClearScreenForPaneIdPayload {
PaneId pane_id = 1;
}
message ScrollUpInPaneIdPayload {
PaneId pane_id = 1;
}
message ScrollDownInPaneIdPayload {
PaneId pane_id = 1;
}
message ScrollToTopInPaneIdPayload {
PaneId pane_id = 1;
}
message ScrollToBottomInPaneIdPayload {
PaneId pane_id = 1;
}
message PageScrollUpInPaneIdPayload {
PaneId pane_id = 1;
}
message PageScrollDownInPaneIdPayload {
PaneId pane_id = 1;
}
message TogglePaneIdFullscreenPayload {
PaneId pane_id = 1;
}
message TogglePaneEmbedOrEjectForPaneIdPayload {
PaneId pane_id = 1;
}
message CloseTabWithIndexPayload {
uint32 tab_index = 1;
}
message WriteCharsToPaneIdPayload {
string chars_to_write = 1;
PaneId pane_id = 2;
}
message WriteToPaneIdPayload {
bytes bytes_to_write = 1;
PaneId pane_id = 2;
}
message EditScrollbackForPaneWithIdPayload {
PaneId pane_id = 1;
}
message ResizePaneIdWithDirectionPayload {
resize.Resize resize = 1;
PaneId pane_id = 2;
}
message ReconfigurePayload {
string config = 1;
bool write_to_disk = 2;
}
message RerunCommandPanePayload {
uint32 terminal_pane_id = 1;
}
message HidePaneWithIdPayload {
PaneId pane_id = 1;
}
message ShowPaneWithIdPayload {
PaneId pane_id = 1;
bool should_float_if_hidden = 2;
}
message NewTabsWithLayoutInfoPayload {
event.LayoutInfo layout_info = 1;
}
message KillSessionsPayload {
repeated string session_names = 1;
}
message CliPipeOutputPayload {
string pipe_name = 1;
string output = 2;
}
message MessageToPluginPayload {
optional string plugin_url = 1;
repeated ContextItem plugin_config = 2;
string message_name = 3;
optional string message_payload = 4;
repeated ContextItem message_args = 5;
optional NewPluginArgs new_plugin_args = 6;
optional uint32 destination_plugin_id = 7;
optional FloatingPaneCoordinates floating_pane_coordinates = 8;
}
message NewPluginArgs {
optional bool should_float = 1;
optional PaneId pane_id_to_replace = 2;
optional string pane_title = 3;
optional string cwd = 4;
bool skip_cache = 5;
}
message PaneId {
PaneType pane_type = 1;
uint32 id = 2;
}
enum PaneType {
Terminal = 0;
Plugin = 1;
}
message SwitchSessionPayload {
optional string name = 1;
optional uint32 tab_position = 2;
optional uint32 pane_id = 3;
optional bool pane_id_is_plugin = 4;
optional event.LayoutInfo layout = 5;
optional string cwd = 6;
}
message RequestPluginPermissionPayload {
repeated plugin_permission.PermissionType permissions = 1;
}
message SubscribePayload {
event.EventNameList subscriptions = 1;
}
message UnsubscribePayload {
event.EventNameList subscriptions = 1;
}
message OpenFilePayload {
file.File file_to_open = 1;
optional FloatingPaneCoordinates floating_pane_coordinates = 2;
repeated ContextItem context = 3;
}
message OpenCommandPanePayload {
command.Command command_to_run = 1;
optional FloatingPaneCoordinates floating_pane_coordinates = 2;
repeated ContextItem context = 3;
}
message SwitchTabToPayload {
uint32 tab_index = 1;
}
message SetTimeoutPayload {
double seconds = 1;
}
message ExecCmdPayload {
repeated string command_line = 1;
}
message RunCommandPayload {
repeated string command_line = 1;
repeated EnvVariable env_variables = 2;
string cwd = 3;
repeated ContextItem context = 4;
}
message WebRequestPayload {
string url = 1;
HttpVerb verb = 2;
repeated event.Header headers = 3;
bytes body = 4;
repeated ContextItem context = 5;
}
enum HttpVerb {
Get = 0;
Post = 1;
Put = 2;
Delete = 3;
}
message EnvVariable {
string name = 1;
string value = 2;
}
message ContextItem {
string name = 1;
string value = 2;
}
message PluginMessagePayload {
api.message.Message message = 1;
}
message ResizePayload {
resize.Resize resize = 1;
}
message MovePayload {
resize.MoveDirection direction = 1;
}
message PaneIdAndFloatingPaneCoordinates {
PaneId pane_id = 1;
FloatingPaneCoordinates floating_pane_coordinates = 2;
}
message IdAndNewName {
uint32 id = 1; // pane id or tab index
string new_name = 2;
}
message FloatingPaneCoordinates {
optional FixedOrPercentValue x = 1;
optional FixedOrPercentValue y = 2;
optional FixedOrPercentValue width = 3;
optional FixedOrPercentValue height = 4;
optional bool pinned = 5;
}
message FixedOrPercentValue {
FixedOrPercent type = 1;
uint32 value = 2;
}
enum FixedOrPercent {
Fixed = 0;
Percent = 1;
}
message CreateTokenResponse {
optional string token = 1;
optional string token_label = 2;
optional string error = 3;
}
message RevokeTokenResponse {
bool successfully_revoked = 1;
optional string error = 2;
}
message ListTokensResponse {
// tokens/creation_times should be synchronized
repeated string tokens = 1;
repeated string creation_times = 2;
optional string error = 3;
}
message RevokeAllWebTokensResponse {
bool successfully_revoked = 1;
optional string error = 2;
}
message RenameWebTokenResponse {
bool successfully_renamed = 1;
optional string error = 2;
}