diff --git a/src/cascadia/TerminalCore/TerminalSelection.cpp b/src/cascadia/TerminalCore/TerminalSelection.cpp index 707415015a..d588b67cb0 100644 --- a/src/cascadia/TerminalCore/TerminalSelection.cpp +++ b/src/cascadia/TerminalCore/TerminalSelection.cpp @@ -294,9 +294,21 @@ std::pair Terminal::_ExpandSelectionAnchors(std::pair 0 && buffer.GetRowByOffset(start.y - 1).WasWrapForced()) + { + --start.y; + } + // climb down to the last row that is wrapped + while (end.y + 1 < height && buffer.GetRowByOffset(end.y).WasWrapForced()) + { + ++end.y; + } start = { bufferSize.Left(), start.y }; end = { bufferSize.RightExclusive(), end.y }; break; diff --git a/src/cascadia/UnitTests_TerminalCore/SelectionTest.cpp b/src/cascadia/UnitTests_TerminalCore/SelectionTest.cpp index 1585fef905..d59ea73617 100644 --- a/src/cascadia/UnitTests_TerminalCore/SelectionTest.cpp +++ b/src/cascadia/UnitTests_TerminalCore/SelectionTest.cpp @@ -549,6 +549,21 @@ namespace TerminalCoreUnitTests ValidateLinearSelection(term, { 0, 10 }, { term.GetViewport().RightExclusive(), 10 }); } + TEST_METHOD(TripleClick_WrappedLine) + { + Terminal term{ Terminal::TestDummyMarker{} }; + DummyRenderer renderer{ &term }; + term.Create({ 10, 5 }, 0, renderer); + term.Write(L"ABCDEFGHIJKLMNOPQRSTUVWXYZ"); + + // Simulate click at (x,y) = (3,1) + auto clickPos = til::point{ 3, 1 }; + term.MultiClickSelection(clickPos, Terminal::SelectionExpansion::Line); + + // Validate selection area + ValidateLinearSelection(term, { 0, 0 }, { term.GetViewport().RightExclusive(), 2 }); + } + TEST_METHOD(TripleClickDrag_Horizontal) { Terminal term{ Terminal::TestDummyMarker{} };