diff options
| author | user <user@clank> | 2026-08-08 21:06:40 +0200 |
|---|---|---|
| committer | user <user@clank> | 2026-08-08 21:06:40 +0200 |
| commit | 97b744a57e3ba53169781a9357d8dc86b15d387e (patch) | |
| tree | 258562cbe750017fc08180e3d92a96c12689a47d /zellij-server | |
| parent | sl0p: uniform pane gap + aspect-corrected horizontal gap (diff) | |
| download | sl0ppij-97b744a57e3ba53169781a9357d8dc86b15d387e.tar.gz sl0ppij-97b744a57e3ba53169781a9357d8dc86b15d387e.tar.xz sl0ppij-97b744a57e3ba53169781a9357d8dc86b15d387e.zip | |
sl0p: CSS-style 1/2/4-value shorthand for inner padding
`padding` now accepts:
padding 1 -> all four sides
padding 1 2 -> up/down = 1, left/right = 2
padding 1 2 3 4 -> up=1 down=2 left=3 right=4
NOTE the 4-value order is UP DOWN LEFT RIGHT as requested, deliberately NOT
CSS's clockwise top-right-bottom-left. Documented on PanePadding and at the
parser, since the similarity to CSS invites the wrong assumption.
3 or 5 values are rejected with a message naming the accepted forms, rather
than being silently reinterpreted. Negative values clamp to 0.
ASPECT: only the 1-value form is aspect-corrected (left/right multiplied by
gap_aspect) so `padding 1` looks square on a non-square cell grid. The 2- and
4-value forms are literal: specifying axes separately means the caller is
already controlling horizontal size, and silently doubling it would surprise.
Style now carries a PanePadding {top,bottom,left,right} instead of an x/y
pair, which also collapses the reconfigure plumbing back to a single field
rather than growing another parameter per side.
to_kdl always emits the explicit 4-value form: emitting the 1-value form
would re-apply gap_aspect on the next read and silently double the padding
on every config round-trip.
Baselines held: zellij-utils 435/5, zellij-server 1421/30.
Diffstat (limited to 'zellij-server')
| -rw-r--r-- | zellij-server/src/lib.rs | 9 | ||||
| -rw-r--r-- | zellij-server/src/panes/floating_panes/mod.rs | 8 | ||||
| -rw-r--r-- | zellij-server/src/panes/plugin_pane.rs | 14 | ||||
| -rw-r--r-- | zellij-server/src/panes/terminal_pane.rs | 14 | ||||
| -rw-r--r-- | zellij-server/src/panes/tiled_panes/mod.rs | 8 | ||||
| -rw-r--r-- | zellij-server/src/screen.rs | 16 | ||||
| -rw-r--r-- | zellij-server/src/tab/mod.rs | 15 |
7 files changed, 33 insertions, 51 deletions
diff --git a/zellij-server/src/lib.rs b/zellij-server/src/lib.rs index a80bda2b..fe5b3b19 100644 --- a/zellij-server/src/lib.rs +++ b/zellij-server/src/lib.rs @@ -462,8 +462,7 @@ impl SessionMetaData { pane_title_alignment: new_config.ui.pane_frames.title_alignment, pane_gap_x: new_config.ui.pane_frames.resolved_gap().0, pane_gap_y: new_config.ui.pane_frames.resolved_gap().1, - pane_padding_x: new_config.ui.pane_frames.resolved_padding().0, - pane_padding_y: new_config.ui.pane_frames.resolved_padding().1, + pane_padding: new_config.ui.pane_frames.resolved_padding(), stacked_resize: new_config.options.stacked_resize.unwrap_or(true), stacked_pane_list: new_config.options.stacked_pane_list.unwrap_or(true), default_editor: new_config.options.scrollback_editor.clone(), @@ -1008,8 +1007,7 @@ pub fn start_server_impl( pane_title_alignment: config.ui.pane_frames.title_alignment, pane_gap_x: config.ui.pane_frames.resolved_gap().0, pane_gap_y: config.ui.pane_frames.resolved_gap().1, - pane_padding_x: config.ui.pane_frames.resolved_padding().0, - pane_padding_y: config.ui.pane_frames.resolved_padding().1, + pane_padding: config.ui.pane_frames.resolved_padding(), }, }; @@ -1196,8 +1194,7 @@ pub fn start_server_impl( pane_title_alignment: config.ui.pane_frames.title_alignment, pane_gap_x: config.ui.pane_frames.resolved_gap().0, pane_gap_y: config.ui.pane_frames.resolved_gap().1, - pane_padding_x: config.ui.pane_frames.resolved_padding().0, - pane_padding_y: config.ui.pane_frames.resolved_padding().1, + pane_padding: config.ui.pane_frames.resolved_padding(), }, }; diff --git a/zellij-server/src/panes/floating_panes/mod.rs b/zellij-server/src/panes/floating_panes/mod.rs index 8252612c..3e5e80f8 100644 --- a/zellij-server/src/panes/floating_panes/mod.rs +++ b/zellij-server/src/panes/floating_panes/mod.rs @@ -1725,16 +1725,14 @@ impl FloatingPanes { title_alignment: zellij_utils::data::PaneTitleAlignment, gap_x: usize, gap_y: usize, - padding_x: usize, - padding_y: usize, + padding: zellij_utils::data::PanePadding, ) { self.style.pane_title_alignment = title_alignment; self.style.pane_gap_x = gap_x; self.style.pane_gap_y = gap_y; - self.style.pane_padding_x = padding_x; - self.style.pane_padding_y = padding_y; + self.style.pane_padding = padding; for pane in self.panes.values_mut() { - pane.update_frame_layout(title_alignment, gap_x, gap_y, padding_x, padding_y); + pane.update_frame_layout(title_alignment, gap_x, gap_y, padding); } // Unlike the tiled panes, `set_pane_frame_style` only re-runs the // content-offset sweep for a fullscreen floating pane, so gap/padding diff --git a/zellij-server/src/panes/plugin_pane.rs b/zellij-server/src/panes/plugin_pane.rs index 4f4e138d..6c1e8707 100644 --- a/zellij-server/src/panes/plugin_pane.rs +++ b/zellij-server/src/panes/plugin_pane.rs @@ -773,10 +773,10 @@ impl Pane for PluginPane { Offset::default() } else { Offset { - top: self.gap_offset.top.saturating_add(self.style.pane_padding_y), - bottom: self.gap_offset.bottom.saturating_add(self.style.pane_padding_y), - left: self.gap_offset.left.saturating_add(self.style.pane_padding_x), - right: self.gap_offset.right.saturating_add(self.style.pane_padding_x), + top: self.gap_offset.top.saturating_add(self.style.pane_padding.top), + bottom: self.gap_offset.bottom.saturating_add(self.style.pane_padding.bottom), + left: self.gap_offset.left.saturating_add(self.style.pane_padding.left), + right: self.gap_offset.right.saturating_add(self.style.pane_padding.right), } }; self.content_offset = @@ -915,14 +915,12 @@ impl Pane for PluginPane { title_alignment: zellij_utils::data::PaneTitleAlignment, gap_x: usize, gap_y: usize, - padding_x: usize, - padding_y: usize, + padding: zellij_utils::data::PanePadding, ) { self.style.pane_title_alignment = title_alignment; self.style.pane_gap_x = gap_x; self.style.pane_gap_y = gap_y; - self.style.pane_padding_x = padding_x; - self.style.pane_padding_y = padding_y; + self.style.pane_padding = padding; self.frame.clear(); } fn set_should_be_suppressed(&mut self, should_be_suppressed: bool) { diff --git a/zellij-server/src/panes/terminal_pane.rs b/zellij-server/src/panes/terminal_pane.rs index 8c44d7b1..7fb78171 100644 --- a/zellij-server/src/panes/terminal_pane.rs +++ b/zellij-server/src/panes/terminal_pane.rs @@ -991,10 +991,10 @@ impl Pane for TerminalPane { Offset::default() } else { Offset { - top: self.gap_offset.top.saturating_add(self.style.pane_padding_y), - bottom: self.gap_offset.bottom.saturating_add(self.style.pane_padding_y), - left: self.gap_offset.left.saturating_add(self.style.pane_padding_x), - right: self.gap_offset.right.saturating_add(self.style.pane_padding_x), + top: self.gap_offset.top.saturating_add(self.style.pane_padding.top), + bottom: self.gap_offset.bottom.saturating_add(self.style.pane_padding.bottom), + left: self.gap_offset.left.saturating_add(self.style.pane_padding.left), + right: self.gap_offset.right.saturating_add(self.style.pane_padding.right), } }; self.content_offset = @@ -1269,14 +1269,12 @@ impl Pane for TerminalPane { title_alignment: zellij_utils::data::PaneTitleAlignment, gap_x: usize, gap_y: usize, - padding_x: usize, - padding_y: usize, + padding: zellij_utils::data::PanePadding, ) { self.style.pane_title_alignment = title_alignment; self.style.pane_gap_x = gap_x; self.style.pane_gap_y = gap_y; - self.style.pane_padding_x = padding_x; - self.style.pane_padding_y = padding_y; + self.style.pane_padding = padding; self.frame.clear(); } fn drain_fake_cursors(&mut self) -> Option<HashSet<(usize, usize)>> { diff --git a/zellij-server/src/panes/tiled_panes/mod.rs b/zellij-server/src/panes/tiled_panes/mod.rs index 835c8e74..4d8f0a4a 100644 --- a/zellij-server/src/panes/tiled_panes/mod.rs +++ b/zellij-server/src/panes/tiled_panes/mod.rs @@ -3156,16 +3156,14 @@ impl TiledPanes { title_alignment: zellij_utils::data::PaneTitleAlignment, gap_x: usize, gap_y: usize, - padding_x: usize, - padding_y: usize, + padding: zellij_utils::data::PanePadding, ) { self.style.pane_title_alignment = title_alignment; self.style.pane_gap_x = gap_x; self.style.pane_gap_y = gap_y; - self.style.pane_padding_x = padding_x; - self.style.pane_padding_y = padding_y; + self.style.pane_padding = padding; for pane in self.panes.values_mut() { - pane.update_frame_layout(title_alignment, gap_x, gap_y, padding_x, padding_y); + pane.update_frame_layout(title_alignment, gap_x, gap_y, padding); } } pub fn stack_panes( diff --git a/zellij-server/src/screen.rs b/zellij-server/src/screen.rs index c3c06ca9..438fee2d 100644 --- a/zellij-server/src/screen.rs +++ b/zellij-server/src/screen.rs @@ -43,7 +43,7 @@ use zellij_utils::data::{ CommandOrPlugin, Direction, EventType, FloatingPaneCoordinates, GetFocusedPaneInfoResponse, HostTerminalThemeMode, KeyWithModifier, LayoutInfo, LayoutWithError, ListPanesResponse, ListTabsResponse, NewPanePlacement, PaneContents, PaneInfo, PaneListEntry, PaneManifest, - PaneRenderReport, PaneScrollbackResponse, PaneTitleAlignment, PluginPermission, + PaneRenderReport, PanePadding, PaneScrollbackResponse, PaneTitleAlignment, PluginPermission, RegexHighlight, Resize, ResizeStrategy, SessionInfo, Styling, TabInfo, ThemeHue, WebSharing, }; @@ -779,8 +779,7 @@ pub enum ScreenInstruction { pane_title_alignment: PaneTitleAlignment, pane_gap_x: usize, pane_gap_y: usize, - pane_padding_x: usize, - pane_padding_y: usize, + pane_padding: PanePadding, stacked_resize: bool, stacked_pane_list: bool, default_editor: Option<PathBuf>, @@ -6270,8 +6269,7 @@ impl Screen { pane_title_alignment: PaneTitleAlignment, pane_gap_x: usize, pane_gap_y: usize, - pane_padding_x: usize, - pane_padding_y: usize, + pane_padding: PanePadding, stacked_resize: bool, stacked_pane_list: bool, default_editor: Option<PathBuf>, @@ -6331,7 +6329,7 @@ impl Screen { tab.update_copy_options(&self.copy_options); // must precede set_pane_frames: gap/padding are baked into // content_offset by the sweep that set_pane_frames triggers - tab.update_frame_layout(pane_title_alignment, pane_gap_x, pane_gap_y, pane_padding_x, pane_padding_y); + tab.update_frame_layout(pane_title_alignment, pane_gap_x, pane_gap_y, pane_padding); tab.set_pane_frames(pane_frame_style); tab.update_arrow_fonts(should_support_arrow_fonts); tab.update_advanced_mouse_actions(advanced_mouse_actions); @@ -10850,8 +10848,7 @@ pub(crate) fn screen_thread_main( pane_title_alignment, pane_gap_x, pane_gap_y, - pane_padding_x, - pane_padding_y, + pane_padding, stacked_resize, stacked_pane_list, default_editor, @@ -10882,8 +10879,7 @@ pub(crate) fn screen_thread_main( pane_title_alignment, pane_gap_x, pane_gap_y, - pane_padding_x, - pane_padding_y, + pane_padding, stacked_resize, stacked_pane_list, default_editor, diff --git a/zellij-server/src/tab/mod.rs b/zellij-server/src/tab/mod.rs index c9047d68..ec088422 100644 --- a/zellij-server/src/tab/mod.rs +++ b/zellij-server/src/tab/mod.rs @@ -751,8 +751,7 @@ pub trait Pane { _title_alignment: zellij_utils::data::PaneTitleAlignment, _gap_x: usize, _gap_y: usize, - _padding_x: usize, - _padding_y: usize, + _padding: zellij_utils::data::PanePadding, ) { } fn set_should_be_suppressed(&mut self, _should_be_suppressed: bool) {} @@ -7420,20 +7419,18 @@ impl Tab { title_alignment: zellij_utils::data::PaneTitleAlignment, gap_x: usize, gap_y: usize, - padding_x: usize, - padding_y: usize, + padding: zellij_utils::data::PanePadding, ) { self.style.pane_title_alignment = title_alignment; self.style.pane_gap_x = gap_x; self.style.pane_gap_y = gap_y; - self.style.pane_padding_x = padding_x; - self.style.pane_padding_y = padding_y; + self.style.pane_padding = padding; self.floating_panes - .update_pane_frame_layout(title_alignment, gap_x, gap_y, padding_x, padding_y); + .update_pane_frame_layout(title_alignment, gap_x, gap_y, padding); self.tiled_panes - .update_pane_frame_layout(title_alignment, gap_x, gap_y, padding_x, padding_y); + .update_pane_frame_layout(title_alignment, gap_x, gap_y, padding); for (_, pane) in self.suppressed_panes.values_mut() { - pane.update_frame_layout(title_alignment, gap_x, gap_y, padding_x, padding_y); + pane.update_frame_layout(title_alignment, gap_x, gap_y, padding); } } pub fn update_arrow_fonts(&mut self, should_support_arrow_fonts: bool) { |
