Skip to content

Commit

Permalink
fix(commands): extend_line to proper line when count and current line…
Browse files Browse the repository at this point in the history
… selected (helix-editor#5288)
  • Loading branch information
gabydd authored and semin-park committed Jan 4, 2023
1 parent fc1dd02 commit 591e464
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 11 deletions.
19 changes: 8 additions & 11 deletions helix-term/src/commands.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2062,16 +2062,10 @@ fn extend_line_impl(cx: &mut Context, extend: Extend) {
let selection = doc.selection(view.id).clone().transform(|range| {
let (start_line, end_line) = range.line_range(text.slice(..));

let start = text.line_to_char(match extend {
Extend::Above => start_line.saturating_sub(count - 1),
Extend::Below => start_line,
});
let start = text.line_to_char(start_line);
let end = text.line_to_char(
match extend {
Extend::Above => end_line + 1, // the start of next line
Extend::Below => end_line + count,
}
.min(text.len_lines()),
(end_line + 1) // newline of end_line
.min(text.len_lines()),
);

// extend to previous/next line if current line is selected
Expand All @@ -2085,8 +2079,11 @@ fn extend_line_impl(cx: &mut Context, extend: Extend) {
}
} else {
match extend {
Extend::Above => (end, start),
Extend::Below => (start, end),
Extend::Above => (end, text.line_to_char(start_line.saturating_sub(count - 1))),
Extend::Below => (
start,
text.line_to_char((end_line + count).min(text.len_lines())),
),
}
};

Expand Down
43 changes: 43 additions & 0 deletions helix-term/tests/test/commands.rs
Original file line number Diff line number Diff line change
Expand Up @@ -311,3 +311,46 @@ async fn test_undo_redo() -> anyhow::Result<()> {

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(())
}

0 comments on commit 591e464

Please sign in to comment.