@@ -351,6 +351,8 @@ fn move_line_end(cx: &mut Context) {
351 let line = text.char_to_line(range.head);
351 let line = text.char_to_line(range.head);
353 let pos = line_end_char_index(&text.slice(..), line);
353 let pos = line_end_char_index(&text.slice(..), line);
354+ let pos = graphemes::nth_prev_grapheme_boundary(text.slice(..), pos, 1);
355+ let pos = range.head.max(pos).max(text.line_to_char(line));
355 Range::new(pos, pos)
357 Range::new(pos, pos)
@@ -787,6 +789,8 @@ fn extend_line_end(cx: &mut Context) {
787 let line = text.char_to_line(range.head);
789 let line = text.char_to_line(range.head);
789 let pos = line_end_char_index(&text.slice(..), line);
791 let pos = line_end_char_index(&text.slice(..), line);
792+ let pos = graphemes::nth_prev_grapheme_boundary(text.slice(..), pos, 1);
793+ let pos = range.head.max(pos).max(text.line_to_char(line));
791 Range::new(range.anchor, pos)
795 Range::new(range.anchor, pos)