@@ -622,14 +622,25 @@ fn goto_file_start(cx: &mut Context) {
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(..);
629+ .transform(|range| range.put_cursor(text, 0, doc.mode == Mode::Select));
630+ doc.set_selection(view.id, selection);
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();
642+ .transform(|range| range.put_cursor(text, pos, doc.mode == Mode::Select));
643+ doc.set_selection(view.id, selection);
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
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)
2924+ .transform(|range| range.put_cursor(text, pos, doc.mode == Mode::Select));
2925+ doc.set_selection(view.id, selection);
@@ -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
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)
2944+ .transform(|range| range.put_cursor(text, pos, doc.mode == Mode::Select));
2945+ doc.set_selection(view.id, selection);
2927fn goto_last_accessed_file(cx: &mut Context) {
2948fn goto_last_accessed_file(cx: &mut Context) {