mirror of https://github.com/helix-editor/helix
fix(commands): extend_line to proper line when count and current line selected (#5288)
parent
c9ed42cdec
commit
1b1755240d
|
@ -2053,16 +2053,10 @@ fn extend_line_impl(cx: &mut Context, extend: Extend) {
|
||||||
let selection = doc.selection(view.id).clone().transform(|range| {
|
let selection = doc.selection(view.id).clone().transform(|range| {
|
||||||
let (start_line, end_line) = range.line_range(text.slice(..));
|
let (start_line, end_line) = range.line_range(text.slice(..));
|
||||||
|
|
||||||
let start = text.line_to_char(match extend {
|
let start = text.line_to_char(start_line);
|
||||||
Extend::Above => start_line.saturating_sub(count - 1),
|
|
||||||
Extend::Below => start_line,
|
|
||||||
});
|
|
||||||
let end = text.line_to_char(
|
let end = text.line_to_char(
|
||||||
match extend {
|
(end_line + 1) // newline of end_line
|
||||||
Extend::Above => end_line + 1, // the start of next line
|
.min(text.len_lines()),
|
||||||
Extend::Below => end_line + count,
|
|
||||||
}
|
|
||||||
.min(text.len_lines()),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
// extend to previous/next line if current line is selected
|
// extend to previous/next line if current line is selected
|
||||||
|
@ -2076,8 +2070,11 @@ fn extend_line_impl(cx: &mut Context, extend: Extend) {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
match extend {
|
match extend {
|
||||||
Extend::Above => (end, start),
|
Extend::Above => (end, text.line_to_char(start_line.saturating_sub(count - 1))),
|
||||||
Extend::Below => (start, end),
|
Extend::Below => (
|
||||||
|
start,
|
||||||
|
text.line_to_char((end_line + count).min(text.len_lines())),
|
||||||
|
),
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -311,3 +311,46 @@ async fn test_undo_redo() -> anyhow::Result<()> {
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[tokio::test(flavor = "multi_thread")]
|
||||||
|
async fn test_extend_line() -> anyhow::Result<()> {
|
||||||
|
// extend with line selected then count
|
||||||
|
test((
|
||||||
|
platform_line(indoc! {"\
|
||||||
|
#[l|]#orem
|
||||||
|
ipsum
|
||||||
|
dolor
|
||||||
|
|
||||||
|
"})
|
||||||
|
.as_str(),
|
||||||
|
"x2x",
|
||||||
|
platform_line(indoc! {"\
|
||||||
|
#[lorem
|
||||||
|
ipsum
|
||||||
|
dolor
|
||||||
|
|]#
|
||||||
|
"})
|
||||||
|
.as_str(),
|
||||||
|
))
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
// extend with count on partial selection
|
||||||
|
test((
|
||||||
|
platform_line(indoc! {"\
|
||||||
|
#[l|]#orem
|
||||||
|
ipsum
|
||||||
|
|
||||||
|
"})
|
||||||
|
.as_str(),
|
||||||
|
"2x",
|
||||||
|
platform_line(indoc! {"\
|
||||||
|
#[lorem
|
||||||
|
ipsum
|
||||||
|
|]#
|
||||||
|
"})
|
||||||
|
.as_str(),
|
||||||
|
))
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue