From 3706559b64dc27081f7bd1c3a99f9b2600bef3a9 Mon Sep 17 00:00:00 2001 From: Rob Swindell <rob@synchro.net> Date: Thu, 5 Nov 2020 18:49:35 -0800 Subject: [PATCH] The beginnings of ANSI console support on Windows It kinda sorta works, but needs more love. --- src/conio/ansi_cio.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/conio/ansi_cio.c b/src/conio/ansi_cio.c index 5f87ec5b9b..7d12107ce3 100644 --- a/src/conio/ansi_cio.c +++ b/src/conio/ansi_cio.c @@ -44,6 +44,16 @@ struct termios tio_default; /* Initial term settings */ #endif +#ifdef _WIN32 + #ifndef ENABLE_VIRTUAL_TERMINAL_INPUT + #define ENABLE_VIRTUAL_TERMINAL_INPUT 0x0200 + #endif + #ifndef ENABLE_VIRTUAL_TERMINAL_PROCESSING + #define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004 + #endif +#endif + + #include "ciolib.h" #include "ansi_cio.h" @@ -931,10 +941,12 @@ int ansi_initio_cb(void) { #ifdef _WIN32 if(isatty(fileno(stdin))) { - if(!SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), 0)) + if(!SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), ENABLE_VIRTUAL_TERMINAL_INPUT)) return(0); - if(!SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), 0)) + DWORD conmode = 0; + GetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), &conmode); + if(!SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE), conmode | ENABLE_VIRTUAL_TERMINAL_PROCESSING)) return(0); } setmode(fileno(stdout),_O_BINARY); -- GitLab