aboutsummaryrefslogtreecommitdiffstats
path: root/zellij-utils/src/plugin_api
diff options
context:
space:
mode:
authorAram Drevekenin <aram@poor.dev>2025-04-29 20:52:17 +0200
committerGitHub <noreply@github.com>2025-04-29 20:52:17 +0200
commit27c8986939a1642f3e4afda73e9717b7bd328824 (patch)
treee80ee57aeede2578a5ce9fa6d0ab4a350ed9d838 /zellij-utils/src/plugin_api
parentchore: update development version (diff)
downloadsl0ppij-27c8986939a1642f3e4afda73e9717b7bd328824.tar.gz
sl0ppij-27c8986939a1642f3e4afda73e9717b7bd328824.tar.xz
sl0ppij-27c8986939a1642f3e4afda73e9717b7bd328824.zip
feat: multiple Select and Bulk Pane Actions (#4169)
* initial implementation with break panes to new tab * break pane group left/right * group embed/eject panes * stack pane group on resize * close pane group * style(fmt): rustfmt * fix tests * group drag and ungroup with the mouse * fix mouse hover for multiple clients * fix for multiple clients * multiple select plugin initial * use real data in plugin * adjust functionality * fix some ux issues * reflect group mouse group selections in plugin * group/ungroup panes in Zellij * highlight frames when marked by the plugin * refactor: render function in plugin * some ui responsiveness * some more responsiveness and adjust hover text * break out functionality * stack functionality * break panes left/right and close multiple panes * fix(tab): only relayout the relevant layout when non-focused pane is closed * status bar UI * embed and float panes * work * fix some ui/ux issues * refactor: move stuff around * some responsiveness and fix search result browsing bug * change plugin pane title * differentiate group from focused pane * add keyboard shortcut * add ui to compact bar * make boundary colors appear properly without pane frames * get plugins to also display their frame color * make hover shortcuts appear on command panes * fix: do not render search string component if it's empty * BeforeClose Event and unhighlight panes on exit * some UI/UX fixes * some fixes to the catppuccin-latte theme * remove ungroup shortcut * make some ui components opaque * fix more opaque elements * fix some issues with stacking pane order * keyboard shortcuts for grouping * config to opt out of advanced mouse actions * make selected + focused frame color distinct * group marking mode * refactor: multiple-select plugin * adjust stacking group behavior * adjust flashing periods * render common modifier in group controls * add to compact bar * adjust key hint wording * add key to presets and default config * some cleanups * some refactoring * fix tests * fix plugin system tests * tests: group/ungroup/hover * test: BeforeClose plugin event * new plugin assets * style(fmt): rustfmt * remove warnings * tests: give plugin more time to load
Diffstat (limited to 'zellij-utils/src/plugin_api')
-rw-r--r--zellij-utils/src/plugin_api/action.proto2
-rw-r--r--zellij-utils/src/plugin_api/action.rs18
-rw-r--r--zellij-utils/src/plugin_api/event.proto8
-rw-r--r--zellij-utils/src/plugin_api/event.rs44
-rw-r--r--zellij-utils/src/plugin_api/plugin_command.proto32
-rw-r--r--zellij-utils/src/plugin_api/plugin_command.rs153
-rw-r--r--zellij-utils/src/plugin_api/plugin_ids.proto1
-rw-r--r--zellij-utils/src/plugin_api/plugin_ids.rs2
8 files changed, 250 insertions, 10 deletions
diff --git a/zellij-utils/src/plugin_api/action.proto b/zellij-utils/src/plugin_api/action.proto
index 3c4948cf..40a6481f 100644
--- a/zellij-utils/src/plugin_api/action.proto
+++ b/zellij-utils/src/plugin_api/action.proto
@@ -241,6 +241,8 @@ enum ActionName {
KeybindPipe = 84;
TogglePanePinned = 85;
MouseEvent = 86;
+ TogglePaneInGroup = 87;
+ ToggleGroupMarking = 88;
}
message Position {
diff --git a/zellij-utils/src/plugin_api/action.rs b/zellij-utils/src/plugin_api/action.rs
index 6d1fa9cd..857bb385 100644
--- a/zellij-utils/src/plugin_api/action.rs
+++ b/zellij-utils/src/plugin_api/action.rs
@@ -692,6 +692,16 @@ impl TryFrom<ProtobufAction> for Action {
Some(_) => Err("TogglePanePinned should not have a payload"),
None => Ok(Action::TogglePanePinned),
},
+ Some(ProtobufActionName::TogglePaneInGroup) => match protobuf_action.optional_payload {
+ Some(_) => Err("TogglePaneInGroup should not have a payload"),
+ None => Ok(Action::TogglePaneInGroup),
+ },
+ Some(ProtobufActionName::ToggleGroupMarking) => {
+ match protobuf_action.optional_payload {
+ Some(_) => Err("ToggleGroupMarking should not have a payload"),
+ None => Ok(Action::ToggleGroupMarking),
+ }
+ },
Some(ProtobufActionName::KeybindPipe) => match protobuf_action.optional_payload {
Some(_) => Err("KeybindPipe should not have a payload"),
// TODO: at some point we might want to support a payload here
@@ -1236,6 +1246,14 @@ impl TryFrom<Action> for ProtobufAction {
name: ProtobufActionName::TogglePanePinned as i32,
optional_payload: None,
}),
+ Action::TogglePaneInGroup { .. } => Ok(ProtobufAction {
+ name: ProtobufActionName::TogglePaneInGroup as i32,
+ optional_payload: None,
+ }),
+ Action::ToggleGroupMarking { .. } => Ok(ProtobufAction {
+ name: ProtobufActionName::ToggleGroupMarking as i32,
+ optional_payload: None,
+ }),
Action::NoOp
| Action::Confirm
| Action::NewInPlacePane(..)
diff --git a/zellij-utils/src/plugin_api/event.proto b/zellij-utils/src/plugin_api/event.proto
index 14eb0c40..9b0e4d2f 100644
--- a/zellij-utils/src/plugin_api/event.proto
+++ b/zellij-utils/src/plugin_api/event.proto
@@ -54,6 +54,7 @@ enum EventType {
FailedToChangeHostFolder = 28;
PastedText = 29;
ConfigWasWrittenToDisk = 30;
+ BeforeClose = 31;
}
message EventNameList {
@@ -304,6 +305,12 @@ message PaneInfo {
optional string terminal_command = 20;
optional string plugin_url = 21;
bool is_selectable = 22;
+ repeated IndexInPaneGroup index_in_pane_group = 23;
+}
+
+message IndexInPaneGroup {
+ uint32 client_id = 1;
+ uint32 index = 2;
}
message TabInfo {
@@ -334,6 +341,7 @@ message ModeUpdatePayload {
optional input_mode.InputMode base_mode = 6;
optional string editor = 7;
optional string shell = 8;
+ optional bool currently_marking_pane_group = 9;
}
message InputModeKeybinds {
diff --git a/zellij-utils/src/plugin_api/event.rs b/zellij-utils/src/plugin_api/event.rs
index 4707d657..88c55827 100644
--- a/zellij-utils/src/plugin_api/event.rs
+++ b/zellij-utils/src/plugin_api/event.rs
@@ -359,6 +359,10 @@ impl TryFrom<ProtobufEvent> for Event {
None => Ok(Event::ConfigWasWrittenToDisk),
_ => Err("Malformed payload for the ConfigWasWrittenToDisk Event"),
},
+ Some(ProtobufEventType::BeforeClose) => match protobuf_event.payload {
+ None => Ok(Event::BeforeClose),
+ _ => Err("Malformed payload for the BeforeClose Event"),
+ },
None => Err("Unknown Protobuf Event"),
}
}
@@ -733,6 +737,10 @@ impl TryFrom<Event> for ProtobufEvent {
name: ProtobufEventType::ConfigWasWrittenToDisk as i32,
payload: None,
}),
+ Event::BeforeClose => Ok(ProtobufEvent {
+ name: ProtobufEventType::BeforeClose as i32,
+ payload: None,
+ }),
}
}
}
@@ -1072,6 +1080,16 @@ impl TryFrom<ProtobufPaneInfo> for PaneInfo {
terminal_command: protobuf_pane_info.terminal_command,
plugin_url: protobuf_pane_info.plugin_url,
is_selectable: protobuf_pane_info.is_selectable,
+ index_in_pane_group: protobuf_pane_info
+ .index_in_pane_group
+ .iter()
+ .map(|index_in_pane_group| {
+ (
+ index_in_pane_group.client_id as u16,
+ index_in_pane_group.index as usize,
+ )
+ })
+ .collect(),
})
}
}
@@ -1107,6 +1125,14 @@ impl TryFrom<PaneInfo> for ProtobufPaneInfo {
terminal_command: pane_info.terminal_command,
plugin_url: pane_info.plugin_url,
is_selectable: pane_info.is_selectable,
+ index_in_pane_group: pane_info
+ .index_in_pane_group
+ .iter()
+ .map(|(&client_id, &index)| IndexInPaneGroup {
+ client_id: client_id as u32,
+ index: index as u32,
+ })
+ .collect(),
})
}
}
@@ -1216,6 +1242,8 @@ impl TryFrom<ProtobufModeUpdatePayload> for ModeInfo {
let capabilities = PluginCapabilities {
arrow_fonts: protobuf_mode_update_payload.arrow_fonts_support,
};
+ let currently_marking_pane_group =
+ protobuf_mode_update_payload.currently_marking_pane_group;
let mode_info = ModeInfo {
mode: current_mode,
keybinds,
@@ -1225,6 +1253,7 @@ impl TryFrom<ProtobufModeUpdatePayload> for ModeInfo {
base_mode,
editor,
shell,
+ currently_marking_pane_group,
};
Ok(mode_info)
}
@@ -1242,6 +1271,7 @@ impl TryFrom<ModeInfo> for ProtobufModeUpdatePayload {
let session_name = mode_info.session_name;
let editor = mode_info.editor.map(|e| e.display().to_string());
let shell = mode_info.shell.map(|s| s.display().to_string());
+ let currently_marking_pane_group = mode_info.currently_marking_pane_group;
let mut protobuf_input_mode_keybinds: Vec<ProtobufInputModeKeybinds> = vec![];
for (input_mode, input_mode_keybinds) in mode_info.keybinds {
let mode: ProtobufInputMode = input_mode.try_into()?;
@@ -1275,6 +1305,7 @@ impl TryFrom<ModeInfo> for ProtobufModeUpdatePayload {
base_mode: base_mode.map(|b_m| b_m as i32),
editor,
shell,
+ currently_marking_pane_group,
})
}
}
@@ -1344,6 +1375,7 @@ impl TryFrom<ProtobufEventType> for EventType {
ProtobufEventType::FailedToChangeHostFolder => EventType::FailedToChangeHostFolder,
ProtobufEventType::PastedText => EventType::PastedText,
ProtobufEventType::ConfigWasWrittenToDisk => EventType::ConfigWasWrittenToDisk,
+ ProtobufEventType::BeforeClose => EventType::BeforeClose,
})
}
}
@@ -1383,6 +1415,7 @@ impl TryFrom<EventType> for ProtobufEventType {
EventType::FailedToChangeHostFolder => ProtobufEventType::FailedToChangeHostFolder,
EventType::PastedText => ProtobufEventType::PastedText,
EventType::ConfigWasWrittenToDisk => ProtobufEventType::ConfigWasWrittenToDisk,
+ EventType::BeforeClose => ProtobufEventType::BeforeClose,
})
}
}
@@ -1523,6 +1556,7 @@ fn serialize_mode_update_event_with_non_default_values() {
base_mode: Some(InputMode::Locked),
editor: Some(PathBuf::from("my_awesome_editor")),
shell: Some(PathBuf::from("my_awesome_shell")),
+ currently_marking_pane_group: Some(false),
});
let protobuf_event: ProtobufEvent = mode_update_event.clone().try_into().unwrap();
let serialized_protobuf_event = protobuf_event.encode_to_vec();
@@ -1884,6 +1918,14 @@ fn serialize_session_update_event_with_non_default_values() {
TabInfo::default(),
];
let mut panes = HashMap::new();
+ let mut index_in_pane_group_1 = BTreeMap::new();
+ index_in_pane_group_1.insert(1, 0);
+ index_in_pane_group_1.insert(2, 0);
+ index_in_pane_group_1.insert(3, 0);
+ let mut index_in_pane_group_2 = BTreeMap::new();
+ index_in_pane_group_2.insert(1, 1);
+ index_in_pane_group_2.insert(2, 1);
+ index_in_pane_group_2.insert(3, 1);
let panes_list = vec![
PaneInfo {
id: 1,
@@ -1908,6 +1950,7 @@ fn serialize_session_update_event_with_non_default_values() {
terminal_command: Some("foo".to_owned()),
plugin_url: None,
is_selectable: true,
+ index_in_pane_group: index_in_pane_group_1,
},
PaneInfo {
id: 1,
@@ -1932,6 +1975,7 @@ fn serialize_session_update_event_with_non_default_values() {
terminal_command: None,
plugin_url: Some("i_am_a_fake_plugin".to_owned()),
is_selectable: true,
+ index_in_pane_group: index_in_pane_group_2,
},
];
panes.insert(0, panes_list);
diff --git a/zellij-utils/src/plugin_api/plugin_command.proto b/zellij-utils/src/plugin_api/plugin_command.proto
index 3fa321cc..3a63b0c8 100644
--- a/zellij-utils/src/plugin_api/plugin_command.proto
+++ b/zellij-utils/src/plugin_api/plugin_command.proto
@@ -140,6 +140,11 @@ enum CommandName {
OpenFileNearPlugin = 124;
OpenFileFloatingNearPlugin = 125;
OpenFileInPlaceOfPlugin = 126;
+ GroupAndUngroupPanes = 127;
+ HighlightAndUnhighlightPanes = 128;
+ CloseMultiplePanes = 129;
+ FloatMultiplePanes = 130;
+ EmbedMultiplePanes = 131;
}
message PluginCommand {
@@ -236,9 +241,36 @@ message PluginCommand {
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;
}
}
+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;
diff --git a/zellij-utils/src/plugin_api/plugin_command.rs b/zellij-utils/src/plugin_api/plugin_command.rs
index 0de590e7..833d6270 100644
--- a/zellij-utils/src/plugin_api/plugin_command.rs
+++ b/zellij-utils/src/plugin_api/plugin_command.rs
@@ -5,17 +5,19 @@ pub use super::generated_api::api::{
plugin_command::{
plugin_command::Payload, BreakPanesToNewTabPayload, BreakPanesToTabWithIndexPayload,
ChangeFloatingPanesCoordinatesPayload, ChangeHostFolderPayload,
- ClearScreenForPaneIdPayload, CliPipeOutputPayload, CloseTabWithIndexPayload, CommandName,
- ContextItem, EditScrollbackForPaneWithIdPayload, EnvVariable, ExecCmdPayload,
+ ClearScreenForPaneIdPayload, CliPipeOutputPayload, CloseMultiplePanesPayload,
+ CloseTabWithIndexPayload, CommandName, ContextItem, EditScrollbackForPaneWithIdPayload,
+ EmbedMultiplePanesPayload, EnvVariable, ExecCmdPayload,
FixedOrPercent as ProtobufFixedOrPercent,
- FixedOrPercentValue as ProtobufFixedOrPercentValue,
- FloatingPaneCoordinates as ProtobufFloatingPaneCoordinates, HidePaneWithIdPayload,
- HttpVerb as ProtobufHttpVerb, IdAndNewName, KeyToRebind, KeyToUnbind, KillSessionsPayload,
- LoadNewPluginPayload, MessageToPluginPayload, MovePaneWithPaneIdInDirectionPayload,
- MovePaneWithPaneIdPayload, MovePayload, NewPluginArgs as ProtobufNewPluginArgs,
- NewTabsWithLayoutInfoPayload, OpenCommandPaneFloatingNearPluginPayload,
- OpenCommandPaneInPlaceOfPluginPayload, OpenCommandPaneNearPluginPayload,
- OpenCommandPanePayload, OpenFileFloatingNearPluginPayload, OpenFileInPlaceOfPluginPayload,
+ FixedOrPercentValue as ProtobufFixedOrPercentValue, FloatMultiplePanesPayload,
+ FloatingPaneCoordinates as ProtobufFloatingPaneCoordinates, GroupAndUngroupPanesPayload,
+ HidePaneWithIdPayload, HighlightAndUnhighlightPanesPayload, HttpVerb as ProtobufHttpVerb,
+ IdAndNewName, KeyToRebind, KeyToUnbind, KillSessionsPayload, LoadNewPluginPayload,
+ MessageToPluginPayload, MovePaneWithPaneIdInDirectionPayload, MovePaneWithPaneIdPayload,
+ MovePayload, NewPluginArgs as ProtobufNewPluginArgs, NewTabsWithLayoutInfoPayload,
+ OpenCommandPaneFloatingNearPluginPayload, OpenCommandPaneInPlaceOfPluginPayload,
+ OpenCommandPaneNearPluginPayload, OpenCommandPanePayload,
+ OpenFileFloatingNearPluginPayload, OpenFileInPlaceOfPluginPayload,
OpenFileNearPluginPayload, OpenFilePayload, OpenTerminalFloatingNearPluginPayload,
OpenTerminalInPlaceOfPluginPayload, OpenTerminalNearPluginPayload,
PageScrollDownInPaneIdPayload, PageScrollUpInPaneIdPayload, PaneId as ProtobufPaneId,
@@ -1540,6 +1542,78 @@ impl TryFrom<ProtobufPluginCommand> for PluginCommand {
},
_ => Err("Mismatched payload for OpenFileInPlaceOfPlugin"),
},
+ Some(CommandName::GroupAndUngroupPanes) => match protobuf_plugin_command.payload {
+ Some(Payload::GroupAndUngroupPanesPayload(group_and_ungroup_panes_payload)) => {
+ Ok(PluginCommand::GroupAndUngroupPanes(
+ group_and_ungroup_panes_payload
+ .pane_ids_to_group
+ .into_iter()
+ .filter_map(|p| p.try_into().ok())
+ .collect(),
+ group_and_ungroup_panes_payload
+ .pane_ids_to_ungroup
+ .into_iter()
+ .filter_map(|p| p.try_into().ok())
+ .collect(),
+ ))
+ },
+ _ => Err("Mismatched payload for GroupAndUngroupPanes"),
+ },
+ Some(CommandName::HighlightAndUnhighlightPanes) => {
+ match protobuf_plugin_command.payload {
+ Some(Payload::HighlightAndUnhighlightPanesPayload(
+ highlight_and_unhighlight_panes_payload,
+ )) => Ok(PluginCommand::HighlightAndUnhighlightPanes(
+ highlight_and_unhighlight_panes_payload
+ .pane_ids_to_highlight
+ .into_iter()
+ .filter_map(|p| p.try_into().ok())
+ .collect(),
+ highlight_and_unhighlight_panes_payload
+ .pane_ids_to_unhighlight
+ .into_iter()
+ .filter_map(|p| p.try_into().ok())
+ .collect(),
+ )),
+ _ => Err("Mismatched payload for HighlightAndUnhighlightPanes"),
+ }
+ },
+ Some(CommandName::CloseMultiplePanes) => match protobuf_plugin_command.payload {
+ Some(Payload::CloseMultiplePanesPayload(close_multiple_panes_payload)) => {
+ Ok(PluginCommand::CloseMultiplePanes(
+ close_multiple_panes_payload
+ .pane_ids
+ .into_iter()
+ .filter_map(|p| p.try_into().ok())
+ .collect(),
+ ))
+ },
+ _ => Err("Mismatched payload for CloseMultiplePanes"),
+ },
+ Some(CommandName::FloatMultiplePanes) => match protobuf_plugin_command.payload {
+ Some(Payload::FloatMultiplePanesPayload(float_multiple_panes_payload)) => {
+ Ok(PluginCommand::FloatMultiplePanes(
+ float_multiple_panes_payload
+ .pane_ids
+ .into_iter()
+ .filter_map(|p| p.try_into().ok())
+ .collect(),
+ ))
+ },
+ _ => Err("Mismatched payload for FloatMultiplePanes"),
+ },
+ Some(CommandName::EmbedMultiplePanes) => match protobuf_plugin_command.payload {
+ Some(Payload::EmbedMultiplePanesPayload(embed_multiple_panes_payload)) => {
+ Ok(PluginCommand::EmbedMultiplePanes(
+ embed_multiple_panes_payload
+ .pane_ids
+ .into_iter()
+ .filter_map(|p| p.try_into().ok())
+ .collect(),
+ ))
+ },
+ _ => Err("Mismatched payload for EmbedMultiplePanes"),
+ },
None => Err("Unrecognized plugin command"),
}
}
@@ -2551,6 +2625,65 @@ impl TryFrom<PluginCommand> for ProtobufPluginCommand {
},
)),
}),
+ PluginCommand::GroupAndUngroupPanes(panes_to_group, panes_to_ungroup) => {
+ Ok(ProtobufPluginCommand {
+ name: CommandName::GroupAndUngroupPanes as i32,
+ payload: Some(Payload::GroupAndUngroupPanesPayload(
+ GroupAndUngroupPanesPayload {
+ pane_ids_to_group: panes_to_group
+ .iter()
+ .filter_map(|&p| p.try_into().ok())
+ .collect(),
+ pane_ids_to_ungroup: panes_to_ungroup
+ .iter()
+ .filter_map(|&p| p.try_into().ok())
+ .collect(),
+ },
+ )),
+ })
+ },
+ PluginCommand::HighlightAndUnhighlightPanes(
+ panes_to_highlight,
+ panes_to_unhighlight,
+ ) => Ok(ProtobufPluginCommand {
+ name: CommandName::HighlightAndUnhighlightPanes as i32,
+ payload: Some(Payload::HighlightAndUnhighlightPanesPayload(
+ HighlightAndUnhighlightPanesPayload {
+ pane_ids_to_highlight: panes_to_highlight
+ .iter()
+ .filter_map(|&p| p.try_into().ok())
+ .collect(),
+ pane_ids_to_unhighlight: panes_to_unhighlight
+ .iter()
+ .filter_map(|&p| p.try_into().ok())
+ .collect(),
+ },
+ )),
+ }),
+ PluginCommand::CloseMultiplePanes(pane_ids) => Ok(ProtobufPluginCommand {
+ name: CommandName::CloseMultiplePanes as i32,
+ payload: Some(Payload::CloseMultiplePanesPayload(
+ CloseMultiplePanesPayload {
+ pane_ids: pane_ids.iter().filter_map(|&p| p.try_into().ok()).collect(),
+ },
+ )),
+ }),
+ PluginCommand::FloatMultiplePanes(pane_ids) => Ok(ProtobufPluginCommand {
+ name: CommandName::FloatMultiplePanes as i32,
+ payload: Some(Payload::FloatMultiplePanesPayload(
+ FloatMultiplePanesPayload {
+ pane_ids: pane_ids.iter().filter_map(|&p| p.try_into().ok()).collect(),
+ },
+ )),
+ }),
+ PluginCommand::EmbedMultiplePanes(pane_ids) => Ok(ProtobufPluginCommand {
+ name: CommandName::EmbedMultiplePanes as i32,
+ payload: Some(Payload::EmbedMultiplePanesPayload(
+ EmbedMultiplePanesPayload {
+ pane_ids: pane_ids.iter().filter_map(|&p| p.try_into().ok()).collect(),
+ },
+ )),
+ }),
}
}
}
diff --git a/zellij-utils/src/plugin_api/plugin_ids.proto b/zellij-utils/src/plugin_api/plugin_ids.proto
index 09d30bd0..c2c7870c 100644
--- a/zellij-utils/src/plugin_api/plugin_ids.proto
+++ b/zellij-utils/src/plugin_api/plugin_ids.proto
@@ -6,6 +6,7 @@ message PluginIds {
int32 plugin_id = 1;
int32 zellij_pid = 2;
string initial_cwd = 3;
+ uint32 client_id = 4;
}
message ZellijVersion {
diff --git a/zellij-utils/src/plugin_api/plugin_ids.rs b/zellij-utils/src/plugin_api/plugin_ids.rs
index 749ccf22..9a750973 100644
--- a/zellij-utils/src/plugin_api/plugin_ids.rs
+++ b/zellij-utils/src/plugin_api/plugin_ids.rs
@@ -13,6 +13,7 @@ impl TryFrom<ProtobufPluginIds> for PluginIds {
plugin_id: protobuf_plugin_ids.plugin_id as u32,
zellij_pid: protobuf_plugin_ids.zellij_pid as u32,
initial_cwd: PathBuf::from(protobuf_plugin_ids.initial_cwd),
+ client_id: protobuf_plugin_ids.client_id as u16,
})
}
}
@@ -24,6 +25,7 @@ impl TryFrom<PluginIds> for ProtobufPluginIds {
plugin_id: plugin_ids.plugin_id as i32,
zellij_pid: plugin_ids.zellij_pid as i32,
initial_cwd: plugin_ids.initial_cwd.display().to_string(),
+ client_id: plugin_ids.client_id as u32,
})
}
}