@@ -2053,16 +2053,10 @@ fn extend_line_impl(cx: &mut Context, extend: Extend) {
20532053 let selection = doc.selection(view.id).clone().transform(|range| {
20542054 let (start_line, end_line) = range.line_range(text.slice(..));
20552055
2056− let start = text.line_to_char(match extend {
2057− Extend::Above => start_line.saturating_sub(count - 1),
2058− Extend::Below => start_line,
2059− });
2056+ let start = text.line_to_char(start_line);
20602057 let end = text.line_to_char(
2061− match extend {
2062− Extend::Above => end_line + 1, // the start of next line
2063− Extend::Below => end_line + count,
2064− }
2065− .min(text.len_lines()),
2058+ (end_line + 1) // newline of end_line
2059+ .min(text.len_lines()),
20662060 );
20672061
20682062 // extend to previous/next line if current line is selected
@@ -2076,8 +2070,11 @@ fn extend_line_impl(cx: &mut Context, extend: Extend) {
20762070 }
20772071 } else {
20782072 match extend {
2079− Extend::Above => (end, start),
2080− Extend::Below => (start, end),
2073+ Extend::Above => (end, text.line_to_char(start_line.saturating_sub(count - 1))),
2074+ Extend::Below => (
2075+ start,
2076+ text.line_to_char((end_line + count).min(text.len_lines())),
2077+ ),
20812078 }
20822079 };
20832080