From e8298a398c6b018c49025ff3f885e4f5f40b01fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bla=C5=BE=20Hrastnik?= Date: Wed, 7 Apr 2021 16:57:58 +0900 Subject: [PATCH] Fix selection rendering, it would be off by 1 if reverse. --- helix-core/src/movement.rs | 3 +-- helix-term/src/ui/editor.rs | 30 ++++++++++++++++-------------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/helix-core/src/movement.rs b/helix-core/src/movement.rs index ed71b02a..a1de95bd 100644 --- a/helix-core/src/movement.rs +++ b/helix-core/src/movement.rs @@ -128,8 +128,7 @@ pub fn move_prev_word_start(slice: RopeSlice, mut begin: usize, count: usize) -> } } - // we want to include begin - Some(Range::new(begin + 1, if with_end { end } else { end + 1 })) + Some(Range::new(begin, if with_end { end } else { end + 1 })) } pub fn move_next_word_end(slice: RopeSlice, mut begin: usize, count: usize) -> Option { diff --git a/helix-term/src/ui/editor.rs b/helix-term/src/ui/editor.rs index 1317a5e7..67f5cf84 100644 --- a/helix-term/src/ui/editor.rs +++ b/helix-term/src/ui/editor.rs @@ -233,19 +233,8 @@ impl EditorView { // TODO: render also if only one of the ranges is in viewport let mut start = view.screen_coords_at_pos(doc, text, selection.anchor); let mut end = view.screen_coords_at_pos(doc, text, selection.head); - - // cursor - if let Some(end) = end { - surface.set_style( - Rect::new( - viewport.x + end.col as u16, - viewport.y + end.row as u16, - 1, - 1, - ), - cursor_style, - ); - } + + let head = end; if selection.head < selection.anchor { std::mem::swap(&mut start, &mut end); @@ -260,7 +249,7 @@ impl EditorView { Rect::new( viewport.x + start.col as u16, viewport.y + start.row as u16, - (end.col - start.col) as u16, + (end.col - start.col) as u16 + 1, 1, ), selection_style, @@ -293,6 +282,19 @@ impl EditorView { selection_style, ); } + + // cursor + if let Some(head) = head { + surface.set_style( + Rect::new( + viewport.x + head.col as u16, + viewport.y + head.row as u16, + 1, + 1, + ), + cursor_style, + ); + } } }