aboutsummaryrefslogtreecommitdiffstats
path: root/zellij-utils/src/plugin_api/plugin_command.rs
diff options
context:
space:
mode:
authorAram Drevekenin <aram@poor.dev>2023-08-24 13:36:24 +0200
committerGitHub <noreply@github.com>2023-08-24 13:36:24 +0200
commitbc628abc1266cdc0dbce4f19a89727527a3e39a8 (patch)
tree6a0fcac6ec35c71a237bca0128a57a5b40afb0e3 /zellij-utils/src/plugin_api/plugin_command.rs
parentdocs(changelog): permission system (diff)
downloadsl0ppij-bc628abc1266cdc0dbce4f19a89727527a3e39a8.tar.gz
sl0ppij-bc628abc1266cdc0dbce4f19a89727527a3e39a8.tar.xz
sl0ppij-bc628abc1266cdc0dbce4f19a89727527a3e39a8.zip
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
Diffstat (limited to 'zellij-utils/src/plugin_api/plugin_command.rs')
-rw-r--r--zellij-utils/src/plugin_api/plugin_command.rs30
1 files changed, 28 insertions, 2 deletions
diff --git a/zellij-utils/src/plugin_api/plugin_command.rs b/zellij-utils/src/plugin_api/plugin_command.rs
index ff50a6a7..71289a14 100644
--- a/zellij-utils/src/plugin_api/plugin_command.rs
+++ b/zellij-utils/src/plugin_api/plugin_command.rs
@@ -5,13 +5,13 @@ pub use super::generated_api::api::{
OpenCommandPanePayload, OpenFilePayload, PaneIdAndShouldFloat,
PluginCommand as ProtobufPluginCommand, PluginMessagePayload,
RequestPluginPermissionPayload, ResizePayload, SetTimeoutPayload, SubscribePayload,
- SwitchTabToPayload, SwitchToModePayload, UnsubscribePayload,
+ SwitchSessionPayload, SwitchTabToPayload, SwitchToModePayload, UnsubscribePayload,
},
plugin_permission::PermissionType as ProtobufPermissionType,
resize::ResizeAction as ProtobufResizeAction,
};
-use crate::data::{PermissionType, PluginCommand};
+use crate::data::{ConnectToSession, PermissionType, PluginCommand};
use std::convert::TryFrom;
@@ -500,6 +500,23 @@ impl TryFrom<ProtobufPluginCommand> for PluginCommand {
},
_ => Err("Mismatched payload for RequestPluginPermission"),
},
+ Some(CommandName::SwitchSession) => match protobuf_plugin_command.payload {
+ Some(Payload::SwitchSessionPayload(payload)) => {
+ let pane_id = match (payload.pane_id, payload.pane_id_is_plugin) {
+ (Some(pane_id), Some(is_plugin)) => Some((pane_id, is_plugin)),
+ (None, None) => None,
+ _ => {
+ return Err("Malformed payload for SwitchSession, 'pane_id' and 'is_plugin' must be included together or not at all")
+ }
+ };
+ Ok(PluginCommand::SwitchSession(ConnectToSession {
+ name: payload.name,
+ tab_position: payload.tab_position.map(|p| p as usize),
+ pane_id,
+ }))
+ },
+ _ => Err("Mismatched payload for SwitchSession"),
+ },
None => Err("Unrecognized plugin command"),
}
}
@@ -846,6 +863,15 @@ impl TryFrom<PluginCommand> for ProtobufPluginCommand {
},
)),
}),
+ PluginCommand::SwitchSession(switch_to_session) => Ok(ProtobufPluginCommand {
+ name: CommandName::SwitchSession as i32,
+ payload: Some(Payload::SwitchSessionPayload(SwitchSessionPayload {
+ name: switch_to_session.name,
+ tab_position: switch_to_session.tab_position.map(|t| t as u32),
+ pane_id: switch_to_session.pane_id.map(|p| p.0),
+ pane_id_is_plugin: switch_to_session.pane_id.map(|p| p.1),
+ })),
+ }),
}
}
}