@@ -121,7 +121,7 @@ enum Align {
123fn align_view(doc: &Document, view: &mut View, align: Align) {
123fn align_view(doc: &Document, view: &mut View, align: Align) {
124− let pos = doc.selection(view.id).cursor();
124+ let pos = doc.selection(view.id).cursor(doc.text().slice(..));
125 let line = doc.text().char_to_line(pos);
125 let line = doc.text().char_to_line(pos);
127 let relative = match align {
127 let relative = match align {
@@ -868,7 +868,10 @@ fn switch_to_lowercase(cx: &mut Context) {
868fn scroll(cx: &mut Context, offset: usize, direction: Direction) {
868fn scroll(cx: &mut Context, offset: usize, direction: Direction) {
869 use Direction::*;
869 use Direction::*;
870 let (view, doc) = current!(cx.editor);
870 let (view, doc) = current!(cx.editor);
871− let cursor = coords_at_pos(doc.text().slice(..), doc.selection(view.id).cursor());
871+ let cursor = coords_at_pos(
872+ doc.text().slice(..),
873+ doc.selection(view.id).cursor(doc.text().slice(..)),
872 let doc_last_line = doc.text().len_lines() - 1;
875 let doc_last_line = doc.text().len_lines() - 1;
874 let last_line = view.last_line(doc);
877 let last_line = view.last_line(doc);
@@ -1038,7 +1041,7 @@ fn split_selection_on_newline(cx: &mut Context) {
1038fn search_impl(doc: &mut Document, view: &mut View, contents: &str, regex: &Regex, extend: bool) {
1041fn search_impl(doc: &mut Document, view: &mut View, contents: &str, regex: &Regex, extend: bool) {
1039 let text = doc.text();
1042 let text = doc.text();
1040 let selection = doc.selection(view.id);
1043 let selection = doc.selection(view.id);
1041− let start = text.char_to_byte(selection.cursor());
1044+ let start = text.char_to_byte(selection.cursor(text.slice(..)));
1043 // use find_at to find the next match after the cursor, loop around the end
1046 // use find_at to find the next match after the cursor, loop around the end
1044 // Careful, `Regex` uses `bytes` as offsets, not character indices!
1047 // Careful, `Regex` uses `bytes` as offsets, not character indices!
@@ -2446,7 +2449,11 @@ fn goto_definition(cx: &mut Context) {
2447 let offset_encoding = language_server.offset_encoding();
2450 let offset_encoding = language_server.offset_encoding();
2452+ let pos = pos_to_lsp_pos(
2449− let pos = pos_to_lsp_pos(doc.text(), doc.selection(view.id).cursor(), offset_encoding);
2454+ doc.selection(view.id).cursor(doc.text().slice(..)),
2451 // TODO: handle fails
2458 // TODO: handle fails
2452 let future = language_server.goto_definition(doc.identifier(), pos, None);
2459 let future = language_server.goto_definition(doc.identifier(), pos, None);
@@ -2483,7 +2490,11 @@ fn goto_type_definition(cx: &mut Context) {
2484 let offset_encoding = language_server.offset_encoding();
2491 let offset_encoding = language_server.offset_encoding();
2493+ let pos = pos_to_lsp_pos(
2486− let pos = pos_to_lsp_pos(doc.text(), doc.selection(view.id).cursor(), offset_encoding);
2495+ doc.selection(view.id).cursor(doc.text().slice(..)),
2488 // TODO: handle fails
2499 // TODO: handle fails
2489 let future = language_server.goto_type_definition(doc.identifier(), pos, None);
2500 let future = language_server.goto_type_definition(doc.identifier(), pos, None);
@@ -2520,7 +2531,11 @@ fn goto_implementation(cx: &mut Context) {
2521 let offset_encoding = language_server.offset_encoding();
2532 let offset_encoding = language_server.offset_encoding();
2534+ let pos = pos_to_lsp_pos(
2523− let pos = pos_to_lsp_pos(doc.text(), doc.selection(view.id).cursor(), offset_encoding);
2536+ doc.selection(view.id).cursor(doc.text().slice(..)),
2525 // TODO: handle fails
2540 // TODO: handle fails
2526 let future = language_server.goto_implementation(doc.identifier(), pos, None);
2541 let future = language_server.goto_implementation(doc.identifier(), pos, None);
@@ -2557,7 +2572,11 @@ fn goto_reference(cx: &mut Context) {
2558 let offset_encoding = language_server.offset_encoding();
2573 let offset_encoding = language_server.offset_encoding();
2575+ let pos = pos_to_lsp_pos(
2560− let pos = pos_to_lsp_pos(doc.text(), doc.selection(view.id).cursor(), offset_encoding);
2577+ doc.selection(view.id).cursor(doc.text().slice(..)),
2562 // TODO: handle fails
2581 // TODO: handle fails
2563 let future = language_server.goto_reference(doc.identifier(), pos, None);
2582 let future = language_server.goto_reference(doc.identifier(), pos, None);
@@ -2616,7 +2635,7 @@ fn goto_next_diag(cx: &mut Context) {
2616 let editor = &mut cx.editor;
2635 let editor = &mut cx.editor;
2617 let (view, doc) = current!(editor);
2636 let (view, doc) = current!(editor);
2619− let cursor_pos = doc.selection(view.id).cursor();
2638+ let cursor_pos = doc.selection(view.id).cursor(doc.text().slice(..));
2620 let diag = if let Some(diag) = doc
2639 let diag = if let Some(diag) = doc
2621 .diagnostics()
2640 .diagnostics()
@@ -2637,7 +2656,7 @@ fn goto_prev_diag(cx: &mut Context) {
2637 let editor = &mut cx.editor;
2656 let editor = &mut cx.editor;
2638 let (view, doc) = current!(editor);
2657 let (view, doc) = current!(editor);
2640− let cursor_pos = doc.selection(view.id).cursor();
2659+ let cursor_pos = doc.selection(view.id).cursor(doc.text().slice(..));
2641 let diag = if let Some(diag) = doc
2660 let diag = if let Some(diag) = doc
2642 .diagnostics()
2661 .diagnostics()
@@ -2665,7 +2684,7 @@ fn signature_help(cx: &mut Context) {
2666 let pos = pos_to_lsp_pos(
2685 let pos = pos_to_lsp_pos(
2667 doc.text(),
2686 doc.text(),
2668− doc.selection(view.id).cursor(),
2687+ doc.selection(view.id).cursor(doc.text().slice(..)),
2669 language_server.offset_encoding(),
2688 language_server.offset_encoding(),
@@ -3403,13 +3422,14 @@ fn completion(cx: &mut Context) {
3405 let offset_encoding = language_server.offset_encoding();
3424 let offset_encoding = language_server.offset_encoding();
3425+ let cursor = doc.selection(view.id).cursor(doc.text().slice(..));
3407− let pos = pos_to_lsp_pos(doc.text(), doc.selection(view.id).cursor(), offset_encoding);
3427+ let pos = pos_to_lsp_pos(doc.text(), cursor, offset_encoding);
3409 // TODO: handle fails
3429 // TODO: handle fails
3410 let future = language_server.completion(doc.identifier(), pos, None);
3430 let future = language_server.completion(doc.identifier(), pos, None);
3412− let trigger_offset = doc.selection(view.id).cursor();
3432+ let trigger_offset = cursor;
3414 cx.callback(
3434 cx.callback(
@@ -3459,7 +3479,7 @@ fn hover(cx: &mut Context) {
3460 let pos = pos_to_lsp_pos(
3480 let pos = pos_to_lsp_pos(
3461 doc.text(),
3481 doc.text(),
3462− doc.selection(view.id).cursor(),
3482+ doc.selection(view.id).cursor(doc.text().slice(..)),
3463 language_server.offset_encoding(),
3483 language_server.offset_encoding(),
@@ -3525,7 +3545,7 @@ fn match_brackets(cx: &mut Context) {
3525 let (view, doc) = current!(cx.editor);
3545 let (view, doc) = current!(cx.editor);
3527 if let Some(syntax) = doc.syntax() {
3547 if let Some(syntax) = doc.syntax() {
3528− let pos = doc.selection(view.id).cursor();
3548+ let pos = doc.selection(view.id).cursor(doc.text().slice(..));
3529 if let Some(pos) = match_brackets::find(syntax, doc.text(), pos) {
3549 if let Some(pos) = match_brackets::find(syntax, doc.text(), pos) {
3530 let selection = Selection::point(pos);
3550 let selection = Selection::point(pos);
3531 doc.set_selection(view.id, selection);
3551 doc.set_selection(view.id, selection);
@@ -3629,7 +3649,7 @@ fn align_view_bottom(cx: &mut Context) {
3630fn align_view_middle(cx: &mut Context) {
3650fn align_view_middle(cx: &mut Context) {
3631 let (view, doc) = current!(cx.editor);
3651 let (view, doc) = current!(cx.editor);
3632− let pos = doc.selection(view.id).cursor();
3652+ let pos = doc.selection(view.id).cursor(doc.text().slice(..));
3633 let pos = coords_at_pos(doc.text().slice(..), pos);
3653 let pos = coords_at_pos(doc.text().slice(..), pos);
3635 const OFFSET: usize = 7; // gutters
3655 const OFFSET: usize = 7; // gutters