on master help sign in
Support extend for multiple goto (#909)

gg, ge, [n]gg

commit21d535565bfcc5ff4e2eae34329b051944a8d1f5 authorIvan Tham <pickfire@riseup.net> dateFri 29 Oct 2021, 09:07 (5 years ago) parentbefecc8
1 file changed+25−4
helix-term/src/commands.rs+25−4
helix-term/src/commands.rs+25−4
@@ -622,14 +622,25 @@ fn goto_file_start(cx: &mut Context) {
622622 } else {
623623 push_jump(cx.editor);
624624 let (view, doc) = current!(cx.editor);
625− doc.set_selection(view.id, Selection::point(0));
625+ let text = doc.text().slice(..);
626+ let selection = doc
627+ .selection(view.id)
628+ .clone()
629+ .transform(|range| range.put_cursor(text, 0, doc.mode == Mode::Select));
630+ doc.set_selection(view.id, selection);
626631 }
627632}
628633
629634fn goto_file_end(cx: &mut Context) {
630635 push_jump(cx.editor);
631636 let (view, doc) = current!(cx.editor);
632− doc.set_selection(view.id, Selection::point(doc.text().len_chars()));
637+ let text = doc.text().slice(..);
638+ let pos = doc.text().len_chars();
639+ let selection = doc
640+ .selection(view.id)
641+ .clone()
642+ .transform(|range| range.put_cursor(text, pos, doc.mode == Mode::Select));
643+ doc.set_selection(view.id, selection);
633644}
634645
635646fn extend_word_impl<F>(cx: &mut Context, extend_fn: F)
@@ -2905,8 +2916,13 @@ fn goto_line(cx: &mut Context) {
29052916 doc.text().len_lines() - 1
29062917 };
29072918 let line_idx = std::cmp::min(count.get() - 1, max_line);
2919+ let text = doc.text().slice(..);
29082920 let pos = doc.text().line_to_char(line_idx);
2909− doc.set_selection(view.id, Selection::point(pos));
2921+ let selection = doc
2922+ .selection(view.id)
2923+ .clone()
2924+ .transform(|range| range.put_cursor(text, pos, doc.mode == Mode::Select));
2925+ doc.set_selection(view.id, selection);
29102926 }
29112927}
29122928
@@ -2920,8 +2936,13 @@ fn goto_last_line(cx: &mut Context) {
29202936 } else {
29212937 doc.text().len_lines() - 1
29222938 };
2939+ let text = doc.text().slice(..);
29232940 let pos = doc.text().line_to_char(line_idx);
2924− doc.set_selection(view.id, Selection::point(pos));
2941+ let selection = doc
2942+ .selection(view.id)
2943+ .clone()
2944+ .transform(|range| range.put_cursor(text, pos, doc.mode == Mode::Select));
2945+ doc.set_selection(view.id, selection);
29252946}
29262947
29272948fn goto_last_accessed_file(cx: &mut Context) {