From 9ad5f2daeb88eff56c8e2e60be16add10adba8a9 Mon Sep 17 00:00:00 2001 From: Matt Constable Date: Mon, 4 Jan 2021 17:24:56 +0000 Subject: [PATCH] Fix console detection for Cygwin/WSL-Shell on Windows --- src/Spectre.Console/Internal/Ansi/AnsiDetector.cs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/Spectre.Console/Internal/Ansi/AnsiDetector.cs b/src/Spectre.Console/Internal/Ansi/AnsiDetector.cs index 5f4b132..552169c 100644 --- a/src/Spectre.Console/Internal/Ansi/AnsiDetector.cs +++ b/src/Spectre.Console/Internal/Ansi/AnsiDetector.cs @@ -54,6 +54,11 @@ namespace Spectre.Console.Internal return (supportsAnsi, legacyConsole); } + return DetectFromTerm(); + } + + private static (bool SupportsAnsi, bool LegacyConsole) DetectFromTerm() + { // Check if the terminal is of type ANSI/VT100/xterm compatible. var term = Environment.GetEnvironmentVariable("TERM"); if (!string.IsNullOrWhiteSpace(term)) @@ -101,8 +106,11 @@ namespace Spectre.Console.Internal var @out = GetStdHandle(STD_OUTPUT_HANDLE); if (!GetConsoleMode(@out, out var mode)) { - // Could not get console mode. - return false; + // Could not get console mode, try TERM (set in cygwin, WSL-Shell). + var (ansiFromTerm, legacyFromTerm) = DetectFromTerm(); + + isLegacy = ansiFromTerm ? legacyFromTerm : isLegacy; + return ansiFromTerm; } if ((mode & ENABLE_VIRTUAL_TERMINAL_PROCESSING) == 0)