zellij/zellij-utils/src/plugin_api/event.proto
Aram Drevekenin bc628abc12
feat(sessions): add a session manager to switch between sessions, tabs and panes and create new ones (#2721)
* write/read session metadata to disk for all sessions

* switch session client side

* fix tests

* various adjustments

* fix full screen focus bug in tiled panes

* fix tests

* fix permission sorting issue

* cleanups

* add session manager

* fix tests

* various cleanups

* style(fmt): rustfmt

* clear screen before switching sessions

* I hate you clippy

* truncate controls line to width

* version session cache

* attempt to fix plugin tests

* style(fmt): rustfmt

* another attempt to fix the tests in the ci
2023-08-24 13:36:24 +02:00

182 lines
4.5 KiB
Protocol Buffer

syntax = "proto3";
import "input_mode.proto";
import "key.proto";
import "style.proto";
import "action.proto";
package api.event;
enum EventType {
/// The input mode or relevant metadata changed
ModeUpdate = 0;
/// The tab state in the app was changed
TabUpdate = 1;
/// The pane state in the app was changed
PaneUpdate = 2;
/// A key was pressed while the user is focused on this plugin's pane
Key = 3;
/// A mouse event happened while the user is focused on this plugin's pane
Mouse = 4;
/// A timer expired set by the `set_timeout` method exported by `zellij-tile`.
Timer = 5;
/// Text was copied to the clipboard anywhere in the app
CopyToClipboard = 6;
/// Failed to copy text to clipboard anywhere in the app
SystemClipboardFailure = 7;
/// Input was received anywhere in the app
InputReceived = 8;
/// This plugin became visible or invisible
Visible = 9;
/// A message from one of the plugin's workers
CustomMessage = 10;
/// A file was created somewhere in the Zellij CWD folder
FileSystemCreate = 11;
/// A file was accessed somewhere in the Zellij CWD folder
FileSystemRead = 12;
/// A file was modified somewhere in the Zellij CWD folder
FileSystemUpdate = 13;
/// A file was deleted somewhere in the Zellij CWD folder
FileSystemDelete = 14;
PermissionRequestResult = 15;
SessionUpdate = 16;
}
message EventNameList {
repeated EventType event_types = 1;
}
message Event {
EventType name = 1;
oneof payload {
ModeUpdatePayload mode_update_payload = 2;
TabUpdatePayload tab_update_payload = 3;
PaneUpdatePayload pane_update_payload = 4;
key.Key key_payload = 5;
MouseEventPayload mouse_event_payload = 6;
float timer_payload = 7;
CopyDestination copy_to_clipboard_payload = 8;
bool visible_payload = 9;
CustomMessagePayload custom_message_payload = 10;
FileListPayload file_list_payload = 11;
PermissionRequestResultPayload permission_request_result_payload = 12;
SessionUpdatePayload session_update_payload = 13;
}
}
message SessionUpdatePayload {
repeated SessionManifest session_manifests = 1;
}
message PermissionRequestResultPayload {
bool granted = 1;
}
message FileListPayload {
repeated string paths = 1;
}
message CustomMessagePayload {
string message_name = 1;
string payload = 2;
}
enum CopyDestination {
Command = 0;
Primary = 1;
System = 2;
}
message MouseEventPayload {
MouseEventName mouse_event_name = 1;
oneof mouse_event_payload {
uint32 line_count = 2;
action.Position position = 3;
}
}
enum MouseEventName {
MouseScrollUp = 0;
MouseScrollDown = 1;
MouseLeftClick = 2;
MouseRightClick = 3;
MouseHold = 4;
MouseRelease = 5;
}
message TabUpdatePayload {
repeated TabInfo tab_info = 1;
}
message PaneUpdatePayload {
repeated PaneManifest pane_manifest = 1;
}
message PaneManifest {
uint32 tab_index = 1;
repeated PaneInfo panes = 2;
}
message SessionManifest {
string name = 1;
repeated TabInfo tabs = 2;
repeated PaneManifest panes = 3;
uint32 connected_clients = 4;
bool is_current_session = 5;
}
message PaneInfo {
uint32 id = 1;
bool is_plugin = 2;
bool is_focused = 3;
bool is_fullscreen = 4;
bool is_floating = 5;
bool is_suppressed = 6;
string title = 7;
bool exited = 8;
optional int32 exit_status = 9;
bool is_held = 10;
uint32 pane_x = 11;
uint32 pane_content_x = 12;
uint32 pane_y = 13;
uint32 pane_content_y = 14;
uint32 pane_rows = 15;
uint32 pane_content_rows = 16;
uint32 pane_columns = 17;
uint32 pane_content_columns = 18;
optional action.Position cursor_coordinates_in_pane = 19;
optional string terminal_command = 20;
optional string plugin_url = 21;
bool is_selectable = 22;
}
message TabInfo {
uint32 position = 1;
string name = 2;
bool active = 3;
uint32 panes_to_hide = 4;
bool is_fullscreen_active = 5;
bool is_sync_panes_active = 6;
bool are_floating_panes_visible = 7;
repeated uint32 other_focused_clients = 8;
optional string active_swap_layout_name = 9;
bool is_swap_layout_dirty = 10;
}
message ModeUpdatePayload {
input_mode.InputMode current_mode = 1;
repeated InputModeKeybinds keybinds = 2;
style.Style style = 3;
bool arrow_fonts_support = 4;
optional string session_name = 5;
}
message InputModeKeybinds {
input_mode.InputMode mode = 1;
repeated KeyBind key_bind = 2;
}
message KeyBind {
key.Key key = 1;
repeated action.Action action = 2;
}