clamp render area to terminal size (#1758)

this fixes a couple of panics that would happen when trying to render
something larger than the terminal, or insert history lines when the top
of the viewport is at y=0.
This commit is contained in:
Jeremy Rose
2025-07-31 09:59:36 -07:00
committed by GitHub
parent 861ba86403
commit 96654a5d52
2 changed files with 3 additions and 3 deletions

View File

@@ -362,7 +362,7 @@ impl App<'_> {
AppState::GitWarning { .. } => 10, AppState::GitWarning { .. } => 10,
}; };
let mut area = terminal.viewport_area; let mut area = terminal.viewport_area;
area.height = desired_height; area.height = desired_height.min(size.height);
area.width = size.width; area.width = size.width;
if area.bottom() > size.height { if area.bottom() > size.height {
terminal terminal

View File

@@ -36,12 +36,12 @@ pub(crate) fn insert_history_lines(terminal: &mut tui::Tui, lines: Vec<Line>) {
.backend_mut() .backend_mut()
.scroll_region_down(area.top()..screen_size.height, scroll_amount) .scroll_region_down(area.top()..screen_size.height, scroll_amount)
.ok(); .ok();
let cursor_top = area.top() - 1; let cursor_top = area.top().saturating_sub(1);
area.y += scroll_amount; area.y += scroll_amount;
terminal.set_viewport_area(area); terminal.set_viewport_area(area);
cursor_top cursor_top
} else { } else {
area.top() - 1 area.top().saturating_sub(1)
}; };
// Limit the scroll region to the lines from the top of the screen to the // Limit the scroll region to the lines from the top of the screen to the