From a76ec9a64e6c505ee0fdd5ee18e83390ac4a84ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bla=C5=BE=20Hrastnik?= Date: Fri, 20 Aug 2021 13:42:01 +0900 Subject: [PATCH] Make scrolling extend in extend mode --- helix-term/src/commands.rs | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs index 7c3eeb4c1..e7f482dd5 100644 --- a/helix-term/src/commands.rs +++ b/helix-term/src/commands.rs @@ -882,12 +882,11 @@ fn switch_to_lowercase(cx: &mut Context) { pub fn scroll(cx: &mut Context, offset: usize, direction: Direction) { use Direction::*; let (view, doc) = current!(cx.editor); - let cursor = coords_at_pos( - doc.text().slice(..), - doc.selection(view.id) - .primary() - .cursor(doc.text().slice(..)), - ); + + let range = doc.selection(view.id).primary(); + let text = doc.text().slice(..); + + let cursor = coords_at_pos(text, range.cursor(text)); let doc_last_line = doc.text().len_lines().saturating_sub(1); let last_line = view.last_line(doc); @@ -917,11 +916,16 @@ pub fn scroll(cx: &mut Context, offset: usize, direction: Direction) { .max(view.offset.row + scrolloff) .min(last_line.saturating_sub(scrolloff)); - let text = doc.text().slice(..); - let pos = pos_at_coords(text, Position::new(line, cursor.col), true); // this func will properly truncate to line end + let head = pos_at_coords(text, Position::new(line, cursor.col), true); // this func will properly truncate to line end + + let anchor = if doc.mode == Mode::Select { + range.anchor + } else { + head + }; // TODO: only manipulate main selection - doc.set_selection(view.id, Selection::point(pos)); + doc.set_selection(view.id, Selection::single(anchor, head)); } fn page_up(cx: &mut Context) {