From be45a0ff4e58f26e95c83e770c6a306dae9c8f17 Mon Sep 17 00:00:00 2001 From: Christian Wischenbart Date: Sun, 4 Apr 2021 21:58:11 +0200 Subject: [PATCH] Fix AnsiConsoleBackend.Clear 1. Add an ED3 command to clear the scroll buffer. This command is not in the original ANSI terminal control sequences but was added later to XTerm to account for the fact that most modern terminals have a scroll-buffer. https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h4-Functions-using-CSI-_-ordered-by-the-final-character-lparen-s-rparen:CSI-Ps-J.1C8A This command is now awailable in basically all terminals with scroll-buffers 2. Change CUP coordinates to 1, 1 The coordinates 0, 0 also worked, but strictly speaking they are outside the available screen area and are capped to 1, 1 anyways. This commit fixes #337 --- src/Spectre.Console.Tests/Unit/AnsiConsoleTests.cs | 4 ++-- .../Internal/Backends/Ansi/AnsiConsoleBackend.cs | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Spectre.Console.Tests/Unit/AnsiConsoleTests.cs b/src/Spectre.Console.Tests/Unit/AnsiConsoleTests.cs index 2b9ed39..19415f8 100644 --- a/src/Spectre.Console.Tests/Unit/AnsiConsoleTests.cs +++ b/src/Spectre.Console.Tests/Unit/AnsiConsoleTests.cs @@ -8,8 +8,8 @@ namespace Spectre.Console.Tests.Unit public partial class AnsiConsoleTests { [Theory] - [InlineData(false, "HelloWorld")] - [InlineData(true, "HelloWorld")] + [InlineData(false, "HelloWorld")] + [InlineData(true, "HelloWorld")] public void Should_Clear_Screen(bool home, string expected) { // Given diff --git a/src/Spectre.Console/Internal/Backends/Ansi/AnsiConsoleBackend.cs b/src/Spectre.Console/Internal/Backends/Ansi/AnsiConsoleBackend.cs index f4698ba..884e498 100644 --- a/src/Spectre.Console/Internal/Backends/Ansi/AnsiConsoleBackend.cs +++ b/src/Spectre.Console/Internal/Backends/Ansi/AnsiConsoleBackend.cs @@ -23,10 +23,11 @@ namespace Spectre.Console public void Clear(bool home) { Write(new ControlSequence(ED(2))); + Write(new ControlSequence(ED(3))); if (home) { - Write(new ControlSequence(CUP(0, 0))); + Write(new ControlSequence(CUP(1, 1))); } }