From c2dc47c1178d67b07d82b920ff76654d5054109a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?flora=20=7E=20=F0=9F=8F=B3=EF=B8=8F=E2=80=8D=E2=9A=A7?= =?UTF-8?q?=EF=B8=8F=20=E2=9D=A4=20=F0=9F=A6=80?= <35181375+tascord@users.noreply.github.com> Date: Fri, 15 Nov 2024 14:18:38 +1100 Subject: [PATCH] Fix over-scrollback-ing, and allow third parties to determine if scroll back should be actionable --- src/grid.rs | 6 +++++- src/screen.rs | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/grid.rs b/src/grid.rs index fc236bc..b3b1770 100644 --- a/src/grid.rs +++ b/src/grid.rs @@ -63,6 +63,10 @@ impl Grid { self.size } + pub fn row_count(&self) -> usize { + self.rows.len() + } + pub fn set_size(&mut self, size: Size) { if size.cols != self.size.cols { for row in &mut self.rows { @@ -122,7 +126,7 @@ impl Grid { self.scrollback .iter() .skip(scrollback_len - self.scrollback_offset) - .chain(self.rows.iter().take(rows_len - self.scrollback_offset)) + .chain(self.rows.iter().take(rows_len.saturating_sub(self.scrollback_offset))) } pub fn drawing_rows(&self) -> impl Iterator { diff --git a/src/screen.rs b/src/screen.rs index 73b904e..64609c1 100644 --- a/src/screen.rs +++ b/src/screen.rs @@ -107,6 +107,10 @@ impl Screen { .set_size(crate::grid::Size { rows, cols }); } + pub fn scrollback_rows(&self) -> usize { + self.grid.row_count() + } + /// Returns the current size of the terminal. /// /// The return value will be (rows, cols).