From d35c642ef36ee5ac2afe7c1b18ad5a717bc807d8 Mon Sep 17 00:00:00 2001 From: Ogulcan Celik Date: Sat, 13 Jun 2026 01:59:24 +0300 Subject: feat: add pane move api and cli refs #299 --- src/api/schema/panes.rs | 63 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) (limited to 'src/api/schema/panes.rs') diff --git a/src/api/schema/panes.rs b/src/api/schema/panes.rs index 6a1827a2..de330993 100644 --- a/src/api/schema/panes.rs +++ b/src/api/schema/panes.rs @@ -47,6 +47,39 @@ pub struct PaneSwapParams { pub target_pane_id: Option, } +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +pub struct PaneMoveParams { + pub pane_id: String, + pub destination: PaneMoveDestination, + #[serde(default)] + pub focus: bool, +} + +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +#[serde(tag = "type", rename_all = "snake_case")] +pub enum PaneMoveDestination { + Tab { + tab_id: String, + #[serde(default, skip_serializing_if = "Option::is_none")] + target_pane_id: Option, + split: SplitDirection, + #[serde(default, skip_serializing_if = "Option::is_none")] + ratio: Option, + }, + NewTab { + #[serde(default, skip_serializing_if = "Option::is_none")] + workspace_id: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + label: Option, + }, + NewWorkspace { + #[serde(default, skip_serializing_if = "Option::is_none")] + label: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + tab_label: Option, + }, +} + #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)] pub struct PaneZoomParams { #[serde(default, skip_serializing_if = "Option::is_none")] @@ -274,6 +307,36 @@ pub enum PaneSwapReason { CrossTab, } +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +pub struct PaneMoveResult { + pub changed: bool, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub reason: Option, + pub previous_pane_id: String, + pub previous_workspace_id: String, + pub previous_tab_id: String, + pub pane: Box, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub source_layout: Option>, + pub target_layout: Box, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub created_workspace: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub created_tab: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub closed_workspace_id: Option, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub closed_tab_id: Option, + pub focused_pane_id: String, +} + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] +#[serde(rename_all = "snake_case")] +pub enum PaneMoveReason { + SameTab, + ZoomedTab, +} + #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct PaneZoomResult { pub changed: bool, -- cgit v1.2.3