diff --git a/src/XTerm.NET.Tests/SelectionTests.cs b/src/XTerm.NET.Tests/SelectionTests.cs index 777470c..933ec49 100644 --- a/src/XTerm.NET.Tests/SelectionTests.cs +++ b/src/XTerm.NET.Tests/SelectionTests.cs @@ -68,6 +68,25 @@ public void SelectAll_IncludesScrollback_NotJustViewport() Assert.Contains("Line7", selectedText); } + [Fact] + public void SelectionText_UsesLineFeedLineEndings() + { + var terminal = new Terminal(new TerminalOptions { Rows = 3, Cols = 80, Scrollback = 20 }); + terminal.Write("alpha\r\nbeta\r\ngamma"); + + terminal.Selection.StartSelection(0, 0); + terminal.Selection.UpdateSelection(4, 2); + terminal.Selection.EndSelection(); + + var selectedText = terminal.Selection.GetSelectionText(); + + Assert.DoesNotContain("\r", selectedText); + Assert.Equal(2, selectedText.Count(ch => ch == '\n')); + Assert.StartsWith("alpha", selectedText); + Assert.Contains("\nbeta", selectedText); + Assert.EndsWith("gamma", selectedText); + } + [Fact] public void Selection_IsCleared_WhenTrimRemovesSelectedLines() { diff --git a/src/XTerm.NET/Selection/SelectionManager.cs b/src/XTerm.NET/Selection/SelectionManager.cs index 0cdfea3..b27e860 100644 --- a/src/XTerm.NET/Selection/SelectionManager.cs +++ b/src/XTerm.NET/Selection/SelectionManager.cs @@ -154,7 +154,7 @@ public string GetSelectionText() // Add line break if not last line and line doesn't wrap if (y < end.y && !line.IsWrapped) { - text.AppendLine(); + text.Append('\n'); } }