summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBlaž Hrastnik2021-04-07 07:57:58 +0000
committerBlaž Hrastnik2021-04-07 07:57:58 +0000
commite8298a398c6b018c49025ff3f885e4f5f40b01fd (patch)
tree84ce25cf9aedde84b043eb8f5a1f2b20475ccf95
parent63e602bda6e6c4381372880f4313aec46170044d (diff)
Fix selection rendering, it would be off by 1 if reverse.
-rw-r--r--helix-core/src/movement.rs3
-rw-r--r--helix-term/src/ui/editor.rs30
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<Range> {
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,
+ );
+ }
}
}