@@ -5,7 +5,7 @@ use helix_core::{
5 object, pos_at_coords,
5 object, pos_at_coords,
6 regex::{self, Regex},
6 regex::{self, Regex},
7 register::{self, Register, Registers},
7 register::{self, Register, Registers},
8− search, selection, Change, ChangeSet, LineEnding, Position, Range, Rope, RopeSlice, Selection,
8+ search, selection, Change, ChangeSet, LineEnding, Position, Range, Rope, RopeSlice, Selection, get_line_ending,
9 SmallVec, Tendril, Transaction,
9 SmallVec, Tendril, Transaction,
@@ -183,11 +183,10 @@ pub fn move_line_end(cx: &mut Context) {
183 let text = doc.text();
183 let text = doc.text();
184 let line = text.char_to_line(range.head);
184 let line = text.char_to_line(range.head);
186− // Line end is pos at the start of next line - 1
187− // subtract another 1 because the line ends with \n
188 let pos = text
186 let pos = text
189 .line_to_char(line + 1)
187 .line_to_char(line + 1)
190− .saturating_sub(doc.line_ending().len() + 1);
188+ .saturating_sub(get_line_ending(&text.line(line)).map(|le| le.len_chars()).unwrap_or(0));
191 Range::new(pos, pos)
190 Range::new(pos, pos)
@@ -607,11 +606,10 @@ pub fn extend_line_end(cx: &mut Context) {
607 let text = doc.text();
606 let text = doc.text();
608 let line = text.char_to_line(range.head);
607 let line = text.char_to_line(range.head);
610− // Line end is pos at the start of next line - 1
611− // subtract another 1 because the line ends with \n
612 let pos = text
609 let pos = text
613 .line_to_char(line + 1)
610 .line_to_char(line + 1)
614− .saturating_sub(doc.line_ending().len() + 1);
611+ .saturating_sub(get_line_ending(&text.line(line)).map(|le| le.len_chars()).unwrap_or(0));
615 Range::new(range.anchor, pos)
613 Range::new(range.anchor, pos)