From 732589c4f0a5dbecc33f8ec4f7626a1cc93a03a8 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Fri, 3 Dec 2021 13:54:23 -0500 Subject: handle scrolling outside of a scroll region it shouldn't scroll the scroll region if you wrap off the end of the whole terminal outside of the scroll region. also, that kind of non-wrap shouldn't set the wrap flag --- src/grid.rs | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/grid.rs b/src/grid.rs index 173910a..785b3cb 100644 --- a/src/grid.rs +++ b/src/grid.rs @@ -549,11 +549,16 @@ impl Grid { self.row_clamp_bottom(in_scroll_region); } - pub fn row_inc_scroll(&mut self, count: u16) { + pub fn row_inc_scroll(&mut self, count: u16) -> u16 { let in_scroll_region = self.in_scroll_region(); self.pos.row = self.pos.row.saturating_add(count); let lines = self.row_clamp_bottom(in_scroll_region); - self.scroll_up(lines); + if in_scroll_region { + self.scroll_up(lines); + lines + } else { + 0 + } } pub fn row_dec_clamp(&mut self, count: u16) { @@ -607,9 +612,13 @@ impl Grid { pub fn col_wrap(&mut self, width: u16, wrap: bool) { if self.pos.col > self.size.cols - width { - self.current_row_mut().wrap(wrap); + let prev_pos = self.pos; self.pos.col = 0; - self.row_inc_scroll(1); + let scrolled = self.row_inc_scroll(1); + let new_pos = self.pos; + self.drawing_row_mut(prev_pos).unwrap().wrap( + wrap && (prev_pos.row + 1 == new_pos.row || scrolled == 1), + ); } } -- cgit v1.2.3-54-g00ecf