summaryrefslogtreecommitdiff
path: root/platform/windows
diff options
context:
space:
mode:
authorHugo Locurcio <hugo.locurcio@hugo.pro>2020-12-05 12:50:20 +0100
committerHugo Locurcio <hugo.locurcio@hugo.pro>2022-08-10 00:53:11 +0200
commitdebfc7c38bb7d485beeed691281d279ac816f6d2 (patch)
tree62919682ca070e80319c36868379c7ced91b24ba /platform/windows
parentd11117d9d8ae32d6acc025a7495d4ae58b9c37b4 (diff)
Enable ANSI escape code processing on Windows 10 and later
This lets the engine and projects use the same color codes in the terminal on all platforms. This includes support for `print_rich()` (GDScript) and `print_line_rich()` (C++).
Diffstat (limited to 'platform/windows')
-rw-r--r--platform/windows/os_windows.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp
index ad4be950cc..60d798ec35 100644
--- a/platform/windows/os_windows.cpp
+++ b/platform/windows/os_windows.cpp
@@ -1148,6 +1148,21 @@ OS_Windows::OS_Windows(HINSTANCE _hInstance) {
DisplayServerWindows::register_windows_driver();
+ // Enable ANSI escape code support on Windows 10 v1607 (Anniversary Update) and later.
+ // This lets the engine and projects use ANSI escape codes to color text just like on macOS and Linux.
+ //
+ // NOTE: The engine does not use ANSI escape codes to color error/warning messages; it uses Windows API calls instead.
+ // Therefore, error/warning messages are still colored on Windows versions older than 10.
+ HANDLE stdoutHandle;
+ stdoutHandle = GetStdHandle(STD_OUTPUT_HANDLE);
+ DWORD outMode = 0;
+ outMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
+
+ if (!SetConsoleMode(stdoutHandle, outMode)) {
+ // Windows 8.1 or below, or Windows 10 prior to Anniversary Update.
+ print_verbose("Can't set the ENABLE_VIRTUAL_TERMINAL_PROCESSING Windows console mode. `print_rich()` will not work as expected.");
+ }
+
Vector<Logger *> loggers;
loggers.push_back(memnew(WindowsTerminalLogger));
_set_logger(memnew(CompositeLogger(loggers)));