zellij/zellij-utils/src/plugin_api/plugin_command.proto
Aram Drevekenin 326c8cd3c6
feat(panes): allow specifying coordinates for a new floating pane through the CLI or plugins (#3122)
* working

* add tests

* add coordinates to all the places

* refactor: move things around:

* style(fmt): rustfmt

* style(code): cleanups
2024-02-08 17:35:55 +01:00

296 lines
7.2 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";
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;
}
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;
}
}
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;
}
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;
}
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;
}
message OpenCommandPanePayload {
command.Command command_to_run = 1;
optional FloatingPaneCoordinates floating_pane_coordinates = 2;
}
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 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;
}
message FixedOrPercentValue {
FixedOrPercent type = 1;
uint32 value = 2;
}
enum FixedOrPercent {
Fixed = 0;
Percent = 1;
}