From 8fa09c244ad7fa7b47bd43d322831709676e143b Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Wed, 18 Apr 2018 02:57:58 +0100 Subject: [PATCH] Metrics UI: Enable virtual terminal sequence processing on Windows https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences --- src/metrics.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/metrics.cpp b/src/metrics.cpp index 6f238e947..6dede3929 100644 --- a/src/metrics.cpp +++ b/src/metrics.cpp @@ -414,6 +414,30 @@ int printInitMessage() return 2; } +#ifdef WIN32 +#define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004 + +bool enableVTMode() +{ + // Set output mode to handle virtual terminal sequences + HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); + if (hOut == INVALID_HANDLE_VALUE) { + return false; + } + + DWORD dwMode = 0; + if (!GetConsoleMode(hOut, &dwMode)) { + return false; + } + + dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING; + if (!SetConsoleMode(hOut, dwMode)) { + return false; + } + return true; +} +#endif + void ThreadShowMetricsScreen() { // Make this thread recognisable as the metrics screen thread @@ -425,6 +449,10 @@ void ThreadShowMetricsScreen() int64_t nRefresh = GetArg("-metricsrefreshtime", isTTY ? 1 : 600); if (isScreen) { +#ifdef WIN32 + enableVTMode(); +#endif + // Clear screen std::cout << "\e[2J";