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();
|
||||
|
||||
// The range is always head exclusive
|
||||
let head = if range.anchor < range.head {
|
||||
range.head - 1
|
||||
let (head, anchor) = if range.anchor < range.head {
|
||||
(range.head - 1, range.anchor)
|
||||
} else {
|
||||
range.head
|
||||
(range.head, range.anchor - 1)
|
||||
};
|
||||
|
||||
let tab_width = doc.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)
|
||||
- std::cmp::min(head_pos.row, anchor_pos.row)
|
||||
|
@ -91,3 +91,43 @@ async fn test_buffer_close_concurrent() -> anyhow::Result<()> {
|
||||
|
||||
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