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