on master help sign in
Support extend for multiple goto (#909)
21d5355Ivan Tham
helix-term/src/commands.rs+25−4
@@ -622,14 +622,25 @@ fn goto_file_start(cx: &mut Context) {
622 } else {
622 } else {
623 push_jump(cx.editor);
623 push_jump(cx.editor);
624 let (view, doc) = current!(cx.editor);
624 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);
626 }
631 }
627}
632}
628
633
629fn goto_file_end(cx: &mut Context) {
634fn goto_file_end(cx: &mut Context) {
630 push_jump(cx.editor);
635 push_jump(cx.editor);
631 let (view, doc) = current!(cx.editor);
636 let (view, doc) = current!(cx.editor);
637+ let text = doc.text().slice(..);
632− doc.set_selection(view.id, Selection::point(doc.text().len_chars()));
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);
633}
644}
634
645
635fn extend_word_impl<F>(cx: &mut Context, extend_fn: F)
646fn extend_word_impl<F>(cx: &mut Context, extend_fn: F)
@@ -2905,8 +2916,13 @@ fn goto_line(cx: &mut Context) {
2905 doc.text().len_lines() - 1
2916 doc.text().len_lines() - 1
2906 };
2917 };
2907 let line_idx = std::cmp::min(count.get() - 1, max_line);
2918 let line_idx = std::cmp::min(count.get() - 1, max_line);
2919+ let text = doc.text().slice(..);
2908 let pos = doc.text().line_to_char(line_idx);
2920 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);
2910 }
2926 }
2911}
2927}
2912
2928
@@ -2920,8 +2936,13 @@ fn goto_last_line(cx: &mut Context) {
2920 } else {
2936 } else {
2921 doc.text().len_lines() - 1
2937 doc.text().len_lines() - 1
2922 };
2938 };
2939+ let text = doc.text().slice(..);
2923 let pos = doc.text().line_to_char(line_idx);
2940 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);
2925}
2946}
2926
2947
2927fn goto_last_accessed_file(cx: &mut Context) {
2948fn goto_last_accessed_file(cx: &mut Context) {