Fix console detection for Cygwin/WSL-Shell on Windows

This commit is contained in:
Matt Constable 2021-01-04 17:24:56 +00:00 committed by GitHub
parent 1f211d3e1f
commit 9ad5f2daeb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -54,6 +54,11 @@ namespace Spectre.Console.Internal
return (supportsAnsi, legacyConsole); return (supportsAnsi, legacyConsole);
} }
return DetectFromTerm();
}
private static (bool SupportsAnsi, bool LegacyConsole) DetectFromTerm()
{
// Check if the terminal is of type ANSI/VT100/xterm compatible. // Check if the terminal is of type ANSI/VT100/xterm compatible.
var term = Environment.GetEnvironmentVariable("TERM"); var term = Environment.GetEnvironmentVariable("TERM");
if (!string.IsNullOrWhiteSpace(term)) if (!string.IsNullOrWhiteSpace(term))
@ -101,8 +106,11 @@ namespace Spectre.Console.Internal
var @out = GetStdHandle(STD_OUTPUT_HANDLE); var @out = GetStdHandle(STD_OUTPUT_HANDLE);
if (!GetConsoleMode(@out, out var mode)) if (!GetConsoleMode(@out, out var mode))
{ {
// Could not get console mode. // Could not get console mode, try TERM (set in cygwin, WSL-Shell).
return false; var (ansiFromTerm, legacyFromTerm) = DetectFromTerm();
isLegacy = ansiFromTerm ? legacyFromTerm : isLegacy;
return ansiFromTerm;
} }
if ((mode & ENABLE_VIRTUAL_TERMINAL_PROCESSING) == 0) if ((mode & ENABLE_VIRTUAL_TERMINAL_PROCESSING) == 0)