fix: 2 panics while setting style + off by 1

The panics would occur because set_style 
would draw outside of the the surface. 
Both occured using `find_prev` or `till_prev`
In my case the first panic! would appear
in a terminal with around 80 columns 
in helix/README.md going to the end of the file
with `geglf(`
the second with `geglfX`
The off by one fix ensures that `find_nth_prev` 
starts at the first character to the left
imgbot
ahkrr 3 years ago committed by Blaž Hrastnik
parent 843c2cdebd
commit e2d780f993

@ -41,7 +41,6 @@ pub fn find_nth_prev(
inclusive: bool, inclusive: bool,
) -> Option<usize> { ) -> Option<usize> {
// start searching right before pos // start searching right before pos
pos = pos.saturating_sub(1);
let mut chars = text.chars_at(pos); let mut chars = text.chars_at(pos);
for _ in 0..n { for _ in 0..n {

@ -261,7 +261,16 @@ impl EditorView {
Rect::new( Rect::new(
viewport.x + start.col as u16, viewport.x + start.col as u16,
viewport.y + start.row as u16, viewport.y + start.row as u16,
((end.col - start.col) as u16 + 1).min(viewport.width), // .min is important, because set_style does a
// for i in area.left()..area.right() and
// area.right = x + width !!! which shouldn't be > then surface.area.right()
// This is checked by a debug_assert! in Buffer::index_of
((end.col - start.col) as u16 + 1).min(
surface
.area
.width
.saturating_sub(viewport.x + start.col as u16),
),
1, 1,
), ),
selection_style, selection_style,
@ -290,7 +299,12 @@ impl EditorView {
); );
} }
surface.set_style( surface.set_style(
Rect::new(viewport.x, viewport.y + end.row as u16, end.col as u16, 1), Rect::new(
viewport.x,
viewport.y + end.row as u16,
(end.col as u16).min(viewport.width),
1,
),
selection_style, selection_style,
); );
} }

Loading…
Cancel
Save