summaryrefslogtreecommitdiffstats
path: root/zellij-utils/src/plugin_api/event.proto
blob: 1463d8f0b1f49611cf377217e159eb3d34dc4942 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
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;
    RunCommandResult = 17;
}

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;
    RunCommandResultPayload run_command_result_payload = 14;
  }
}

message SessionUpdatePayload {
  repeated SessionManifest session_manifests = 1;
}

message RunCommandResultPayload {
  optional int32 exit_code = 1;
  bytes stdout = 2;
  bytes stderr = 3;
  repeated ContextItem context = 4;
}

message ContextItem {
  string name = 1;
  string value = 2;
}

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;
}