diff options
| author | Aram Drevekenin <aram@poor.dev> | 2023-08-24 13:36:24 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-08-24 13:36:24 +0200 |
| commit | bc628abc1266cdc0dbce4f19a89727527a3e39a8 (patch) | |
| tree | 6a0fcac6ec35c71a237bca0128a57a5b40afb0e3 /zellij-utils/src/plugin_api/plugin_command.rs | |
| parent | docs(changelog): permission system (diff) | |
| download | sl0ppij-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.rs | 30 |
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), + })), + }), } } } |
