From bc8d5a2dced549b9ebf47ee2bb58677f40c4146c Mon Sep 17 00:00:00 2001 From: PJB3005 Date: Tue, 24 Feb 2026 14:54:53 +0100 Subject: [PATCH] Make console UTF-8 & VT sequences work reliably on Windows --- CMakeLists.txt | 1 + src/dusk/main.cpp | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index f734ec60fe..b653f008f9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -29,6 +29,7 @@ elseif (MSVC) add_compile_options(/Zc:strictStrings-) add_compile_options(/MP) add_compile_options(/W0) + add_compile_options(/utf-8) endif () if (NOT MSVC) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-error -Wno-c++11-narrowing") diff --git a/src/dusk/main.cpp b/src/dusk/main.cpp index d424bf2b56..4155482488 100644 --- a/src/dusk/main.cpp +++ b/src/dusk/main.cpp @@ -1,5 +1,24 @@ +#if _WIN32 +#define WINDOWS_LEAN_AND_MEAN +#include +#endif + int game_main(int argc, char* argv[]); +void WindowsSetupConsole(); + int main(int argc, char* argv[]) { + WindowsSetupConsole(); return game_main(argc, argv); } + +void WindowsSetupConsole() { +#if _WIN32 + SetConsoleOutputCP(CP_UTF8); + + auto stdout = GetStdHandle(STD_OUTPUT_HANDLE); + DWORD consoleMode; + GetConsoleMode(stdout, &consoleMode); + SetConsoleMode(stdout, consoleMode | ENABLE_PROCESSED_OUTPUT | ENABLE_VIRTUAL_TERMINAL_PROCESSING); +#endif +} \ No newline at end of file