From 60413c08657196e97d4df1bcc565061a0c59923d Mon Sep 17 00:00:00 2001 From: Joel Christner Date: Mon, 1 Jun 2026 15:15:46 -0700 Subject: [PATCH] Use LF line endings in selection text --- src/XTerm.NET.Tests/SelectionTests.cs | 19 +++++++++++++++++++ src/XTerm.NET/Selection/SelectionManager.cs | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) 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'); } }