From 9ed56eb2db29e6d31948f1b1c908acbb44972a30 Mon Sep 17 00:00:00 2001 From: Hojjat Date: Thu, 19 Mar 2026 00:10:26 -0600 Subject: [PATCH] fix: prevent crash when splits are resized too small --- src/terminal.rs | 8 ++++++-- src/terminal_box.rs | 29 ++++++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/src/terminal.rs b/src/terminal.rs index a12471c..1d14973 100644 --- a/src/terminal.rs +++ b/src/terminal.rs @@ -437,8 +437,12 @@ impl Terminal { if width != self.size.width || height != self.size.height { let instant = Instant::now(); - self.size.width = width; - self.size.height = height; + // Clamp dimensions to ensure at least 1 row and 1 column, + // preventing index-out-of-bounds panics in alacritty_terminal. + let min_width = self.size.cell_width.ceil() as u32; + let min_height = self.size.cell_height.ceil() as u32; + self.size.width = width.max(min_width); + self.size.height = height.max(min_height); self.notifier.on_resize(self.size.into()); self.term.lock().resize(self.size); diff --git a/src/terminal_box.rs b/src/terminal_box.rs index 43398c0..dff183e 100644 --- a/src/terminal_box.rs +++ b/src/terminal_box.rs @@ -386,7 +386,34 @@ where - self.padding.y() as i32; if view_w <= 0 || view_h <= 0 { - // Zero sized image + // Pane too small for content, but still fill background + let terminal = self.terminal.lock().unwrap(); + let meta = &terminal.metadata_set[terminal.default_attrs().metadata]; + let background_color = shade(meta.bg, state.is_focused && !self.disabled); + renderer.fill_quad( + Quad { + bounds: layout.bounds(), + border: Border { + radius: if self.show_headerbar { + [0.0, 0.0, corner_radius[2], corner_radius[3]].into() + } else { + corner_radius.into() + }, + width: self.border.width, + color: self.border.color, + }, + ..Default::default() + }, + Color::from_rgba( + f32::from(background_color.r()) / 255.0, + f32::from(background_color.g()) / 255.0, + f32::from(background_color.b()) / 255.0, + match self.opacity { + Some(opacity) => opacity, + None => f32::from(background_color.a()) / 255.0, + }, + ), + ); return; }