From ab7885e93423dbfb57e2b6e7589672c67a4666e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bla=C5=BE=20Hrastnik?= Date: Thu, 31 Mar 2022 15:53:31 +0900 Subject: [PATCH] fix: copy_selection needs to account for to() being exclusive Fixes #1367 Fixes #1590 --- helix-term/src/commands.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs index bd66f26a20d5..3ef72bde83c6 100644 --- a/helix-term/src/commands.rs +++ b/helix-term/src/commands.rs @@ -1342,8 +1342,17 @@ fn copy_selection_on_line(cx: &mut Context, direction: Direction) { let mut primary_index = 0; for range in selection.iter() { let is_primary = *range == selection.primary(); - let head_pos = coords_at_pos(text, range.head); + + // The range is always head exclusive + let head = if range.anchor < range.head { + range.head - 1 + } else { + range.head + }; + + let head_pos = coords_at_pos(text, head); let anchor_pos = coords_at_pos(text, range.anchor); + let height = std::cmp::max(head_pos.row, anchor_pos.row) - std::cmp::min(head_pos.row, anchor_pos.row) + 1;