mirror of
https://github.com/helix-editor/helix.git
synced 2024-11-22 09:26:19 +04:00
Fix backwards selection duplication widening bug (#2945)
* Fix backwards selection duplication widening bug * Add integration tests * Make tests line-ending agnostic Make tests line-ending agnostic Use indoc to fix tests Fix line-ending on test input
This commit is contained in:
parent
244825b9e1
commit
2ac1de305e
@ -1411,16 +1411,16 @@ fn copy_selection_on_line(cx: &mut Context, direction: Direction) {
|
|||||||
let is_primary = *range == selection.primary();
|
let is_primary = *range == selection.primary();
|
||||||
|
|
||||||
// The range is always head exclusive
|
// The range is always head exclusive
|
||||||
let head = if range.anchor < range.head {
|
let (head, anchor) = if range.anchor < range.head {
|
||||||
range.head - 1
|
(range.head - 1, range.anchor)
|
||||||
} else {
|
} else {
|
||||||
range.head
|
(range.head, range.anchor - 1)
|
||||||
};
|
};
|
||||||
|
|
||||||
let tab_width = doc.tab_width();
|
let tab_width = doc.tab_width();
|
||||||
|
|
||||||
let head_pos = visual_coords_at_pos(text, head, tab_width);
|
let head_pos = visual_coords_at_pos(text, head, tab_width);
|
||||||
let anchor_pos = visual_coords_at_pos(text, range.anchor, tab_width);
|
let anchor_pos = visual_coords_at_pos(text, anchor, tab_width);
|
||||||
|
|
||||||
let height = std::cmp::max(head_pos.row, anchor_pos.row)
|
let height = std::cmp::max(head_pos.row, anchor_pos.row)
|
||||||
- std::cmp::min(head_pos.row, anchor_pos.row)
|
- std::cmp::min(head_pos.row, anchor_pos.row)
|
||||||
|
@ -91,3 +91,43 @@ async fn test_buffer_close_concurrent() -> anyhow::Result<()> {
|
|||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn test_selection_duplication() -> anyhow::Result<()> {
|
||||||
|
// Forward
|
||||||
|
test((
|
||||||
|
platform_line(indoc! {"\
|
||||||
|
#[lo|]#rem
|
||||||
|
ipsum
|
||||||
|
dolor
|
||||||
|
"})
|
||||||
|
.as_str(),
|
||||||
|
"CC",
|
||||||
|
platform_line(indoc! {"\
|
||||||
|
#(lo|)#rem
|
||||||
|
#(ip|)#sum
|
||||||
|
#[do|]#lor
|
||||||
|
"})
|
||||||
|
.as_str(),
|
||||||
|
))
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
// Backward
|
||||||
|
test((
|
||||||
|
platform_line(indoc! {"\
|
||||||
|
#[|lo]#rem
|
||||||
|
ipsum
|
||||||
|
dolor
|
||||||
|
"})
|
||||||
|
.as_str(),
|
||||||
|
"CC",
|
||||||
|
platform_line(indoc! {"\
|
||||||
|
#(|lo)#rem
|
||||||
|
#(|ip)#sum
|
||||||
|
#[|do]#lor
|
||||||
|
"})
|
||||||
|
.as_str(),
|
||||||
|
))
|
||||||
|
.await?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user