summaryrefslogtreecommitdiffstats
path: root/zellij-utils
diff options
context:
space:
mode:
Diffstat (limited to 'zellij-utils')
-rw-r--r--zellij-utils/src/input/layout.rs23
-rw-r--r--zellij-utils/src/kdl/mod.rs11
-rw-r--r--zellij-utils/src/pane_size.rs2
3 files changed, 27 insertions, 9 deletions
diff --git a/zellij-utils/src/input/layout.rs b/zellij-utils/src/input/layout.rs
index 1235f3d2b..cef7cebf3 100644
--- a/zellij-utils/src/input/layout.rs
+++ b/zellij-utils/src/input/layout.rs
@@ -849,6 +849,7 @@ impl TiledPaneLayout {
&self,
space: &PaneGeom,
max_panes: Option<usize>,
+ ignore_percent_split_sizes: bool,
) -> Result<Vec<(TiledPaneLayout, PaneGeom)>, &'static str> {
let layouts = match max_panes {
Some(max_panes) => {
@@ -874,9 +875,9 @@ impl TiledPaneLayout {
layout_to_split.focus_deepest_pane();
}
- split_space(space, &layout_to_split, space)?
+ split_space(space, &layout_to_split, space, ignore_percent_split_sizes)?
},
- None => split_space(space, self, space)?,
+ None => split_space(space, self, space, ignore_percent_split_sizes)?,
};
for (_pane_layout, pane_geom) in layouts.iter() {
if !pane_geom.is_at_least_minimum_size() {
@@ -1426,6 +1427,7 @@ fn split_space(
space_to_split: &PaneGeom,
layout: &TiledPaneLayout,
total_space_to_split: &PaneGeom,
+ ignore_percent_split_sizes: bool,
) -> Result<Vec<(TiledPaneLayout, PaneGeom)>, &'static str> {
let sizes: Vec<Option<SplitSize>> = if layout.children_are_stacked {
let index_of_expanded_pane = layout.children.iter().position(|p| p.is_expanded_in_stack);
@@ -1440,6 +1442,15 @@ fn split_space(
*last_size = None;
}
sizes
+ } else if ignore_percent_split_sizes {
+ layout
+ .children
+ .iter()
+ .map(|part| match part.split_size {
+ Some(SplitSize::Percent(_)) => None,
+ split_size => split_size,
+ })
+ .collect()
} else {
layout.children.iter().map(|part| part.split_size).collect()
};
@@ -1539,8 +1550,12 @@ fn split_space(
for (i, part) in layout.children.iter().enumerate() {
let part_position_and_size = split_geom.get(i).unwrap();
if !part.children.is_empty() {
- let mut part_positions =
- split_space(part_position_and_size, part, total_space_to_split)?;
+ let mut part_positions = split_space(
+ part_position_and_size,
+ part,
+ total_space_to_split,
+ ignore_percent_split_sizes,
+ )?;
pane_positions.append(&mut part_positions);
} else {
let part = part.clone();
diff --git a/zellij-utils/src/kdl/mod.rs b/zellij-utils/src/kdl/mod.rs
index d3794d114..37720b2f2 100644
--- a/zellij-utils/src/kdl/mod.rs
+++ b/zellij-utils/src/kdl/mod.rs
@@ -860,6 +860,9 @@ impl TryFrom<(&KdlNode, &Options)> for Action {
)
})?;
+ let swap_tiled_layouts = Some(layout.swap_tiled_layouts.clone());
+ let swap_floating_layouts = Some(layout.swap_floating_layouts.clone());
+
let mut tabs = layout.tabs();
if tabs.len() > 1 {
return Err(ConfigError::new_kdl_error(
@@ -874,8 +877,8 @@ impl TryFrom<(&KdlNode, &Options)> for Action {
Ok(Action::NewTab(
Some(layout),
floating_panes_layout,
- None,
- None,
+ swap_tiled_layouts,
+ swap_floating_layouts,
name,
))
} else {
@@ -884,8 +887,8 @@ impl TryFrom<(&KdlNode, &Options)> for Action {
Ok(Action::NewTab(
Some(layout),
floating_panes_layout,
- None,
- None,
+ swap_tiled_layouts,
+ swap_floating_layouts,
name,
))
}
diff --git a/zellij-utils/src/pane_size.rs b/zellij-utils/src/pane_size.rs
index 16c111b24..fe56e720e 100644
--- a/zellij-utils/src/pane_size.rs
+++ b/zellij-utils/src/pane_size.rs
@@ -122,7 +122,7 @@ impl Dimension {
self.inner += by;
}
pub fn decrease_inner(&mut self, by: usize) {
- self.inner -= by;
+ self.inner = self.inner.saturating_sub(by);
}
pub fn is_fixed(&self) -> bool {