From a1050fc67630802464894a939e1a5e08eebff51f Mon Sep 17 00:00:00 2001 From: Bastian Eicher Date: Fri, 12 Feb 2021 10:57:37 +0100 Subject: [PATCH] Handle output to stderr --- src/Spectre.Console/AnsiConsoleFactory.cs | 6 +++--- src/Spectre.Console/Capabilities.cs | 5 +++++ .../Extensions/TextWriterExtensions.cs | 12 ++++++++++++ src/Spectre.Console/Profile.cs | 2 +- 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/Spectre.Console/AnsiConsoleFactory.cs b/src/Spectre.Console/AnsiConsoleFactory.cs index 55635eb..764544c 100644 --- a/src/Spectre.Console/AnsiConsoleFactory.cs +++ b/src/Spectre.Console/AnsiConsoleFactory.cs @@ -28,7 +28,7 @@ namespace Spectre.Console var (supportsAnsi, legacyConsole) = DetectAnsi(settings, buffer); // Use the provided encoding or fall back to UTF-8 - var encoding = buffer.IsStandardOut() ? System.Console.OutputEncoding : Encoding.UTF8; + var encoding = buffer.IsStandardOut() || buffer.IsStandardError() ? System.Console.OutputEncoding : Encoding.UTF8; // Get the color system var colorSystem = settings.ColorSystem == ColorSystemSupport.Detect @@ -73,14 +73,14 @@ namespace Spectre.Console // Check whether or not this is a legacy console from the existing instance (if any). // We need to do this because once we upgrade the console to support ENABLE_VIRTUAL_TERMINAL_PROCESSING // on Windows, there is no way of detecting whether or not we're running on a legacy console or not. - if (AnsiConsole.Created && !legacyConsole && buffer.IsStandardOut() && AnsiConsole.Profile.Capabilities.Legacy) + if (AnsiConsole.Created && !legacyConsole && (buffer.IsStandardOut() || buffer.IsStandardError()) && AnsiConsole.Profile.Capabilities.Legacy) { legacyConsole = AnsiConsole.Profile.Capabilities.Legacy; } } else { - if (buffer.IsStandardOut()) + if (buffer.IsStandardOut() || buffer.IsStandardError()) { // Are we running on Windows? if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) diff --git a/src/Spectre.Console/Capabilities.cs b/src/Spectre.Console/Capabilities.cs index 2b781a0..b227474 100644 --- a/src/Spectre.Console/Capabilities.cs +++ b/src/Spectre.Console/Capabilities.cs @@ -49,6 +49,11 @@ namespace Spectre.Console return System.Console.IsOutputRedirected; } + if (_profile.Out.IsStandardError()) + { + return System.Console.IsErrorRedirected; + } + // Not stdout, so must be a TTY. return true; } diff --git a/src/Spectre.Console/Extensions/TextWriterExtensions.cs b/src/Spectre.Console/Extensions/TextWriterExtensions.cs index 9fd4e90..b89f7e0 100644 --- a/src/Spectre.Console/Extensions/TextWriterExtensions.cs +++ b/src/Spectre.Console/Extensions/TextWriterExtensions.cs @@ -15,5 +15,17 @@ namespace Spectre.Console return false; } } + + public static bool IsStandardError(this TextWriter writer) + { + try + { + return writer == System.Console.Error; + } + catch + { + return false; + } + } } } diff --git a/src/Spectre.Console/Profile.cs b/src/Spectre.Console/Profile.cs index 4f083db..57229fb 100644 --- a/src/Spectre.Console/Profile.cs +++ b/src/Spectre.Console/Profile.cs @@ -73,7 +73,7 @@ namespace Spectre.Console } // Need to update the output encoding for stdout? - if (_out.IsStandardOut()) + if (_out.IsStandardOut() || _out.IsStandardError()) { System.Console.OutputEncoding = value; }