]> git.djapps.eu Git - pkg/ggml/sources/llama.cpp/commitdiff
Enable ANSI colors on Windows 10+ (#311)
authoranzz1 <redacted>
Tue, 21 Mar 2023 16:14:46 +0000 (18:14 +0200)
committerGitHub <redacted>
Tue, 21 Mar 2023 16:14:46 +0000 (18:14 +0200)
* Enable ANSI colors on Windows 10+

On older versions function will silently fail without any ill effects

* Do not call SetConsoleMode if the mode is already set

* Update main.cpp

---------

Co-authored-by: Georgi Gerganov <redacted>
main.cpp

index bda824ff1d1fac3b1cbc4081cb60cb4ef5cf0def..dd8e52df239d1adee471b6271ef49263ff5b57f3 100644 (file)
--- a/main.cpp
+++ b/main.cpp
 #include <signal.h>
 #endif
 
+#if defined (_WIN32)
+#pragma comment(lib,"kernel32.lib")
+extern "C" __declspec(dllimport) void* __stdcall GetStdHandle(unsigned long nStdHandle);
+extern "C" __declspec(dllimport) int __stdcall GetConsoleMode(void* hConsoleHandle, unsigned long* lpMode);
+extern "C" __declspec(dllimport) int __stdcall SetConsoleMode(void* hConsoleHandle, unsigned long dwMode);
+#endif
+
 #define ANSI_COLOR_RED     "\x1b[31m"
 #define ANSI_COLOR_GREEN   "\x1b[32m"
 #define ANSI_COLOR_YELLOW  "\x1b[33m"
@@ -946,6 +953,14 @@ int main(int argc, char ** argv) {
 
     // set the color for the prompt which will be output initially
     if (params.use_color) {
+#if defined (_WIN32)
+        // Enable ANSI colors on Windows 10+
+        unsigned long dwMode = 0;
+        void* hConOut = GetStdHandle((unsigned long)-11); // STD_OUTPUT_HANDLE (-11)
+        if (hConOut && hConOut != (void*)-1 && GetConsoleMode(hConOut, &dwMode) && !(dwMode & 0x4)) {
+            SetConsoleMode(hConOut, dwMode | 0x4); // ENABLE_VIRTUAL_TERMINAL_PROCESSING (0x4)
+        }
+#endif
         printf(ANSI_COLOR_YELLOW);
     }