From 9610cf338eb615e9b7b495818e0901c38dd99ff7 Mon Sep 17 00:00:00 2001
From: Waqas Hussain <waqas20@gmail.com>
Date: Wed, 15 Dec 2010 01:55:13 +0500
Subject: util.termcolours: Added setstyle(str), which works on Windows too.

---
 util/termcolours.lua | 37 +++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/util/termcolours.lua b/util/termcolours.lua
index 4e267bee..df204688 100644
--- a/util/termcolours.lua
+++ b/util/termcolours.lua
@@ -10,6 +10,14 @@
 local t_concat, t_insert = table.concat, table.insert;
 local char, format = string.char, string.format;
 local ipairs = ipairs;
+local io_write = io.write;
+
+local windows;
+if os.getenv("WINDIR") then
+	windows = require "util.windows";
+end
+local orig_color = windows and windows.get_consolecolor and windows.get_consolecolor();
+
 module "termcolours"
 
 local stylemap = {
@@ -19,6 +27,13 @@ local stylemap = {
 			bold = 1, dark = 2, underline = 4, underlined = 4, normal = 0;
 		}
 
+local winstylemap = {
+	["0"] = orig_color, -- reset
+	["1"] = 7+8, -- bold
+	["1;33"] = 2+4+8, -- bold yellow
+	["1;31"] = 4+8 -- bold red
+}
+
 local fmt_string = char(0x1B).."[%sm%s"..char(0x1B).."[0m";
 function getstring(style, text)
 	if style then
@@ -39,4 +54,26 @@ function getstyle(...)
 	return t_concat(result, ";");
 end
 
+local last = "0";
+function setstyle(style)
+	style = style or "0";
+	if style ~= last then
+		io_write("\27["..style.."m");
+		last = style;
+	end
+end
+
+if windows then
+	function setstyle(style)
+		style = style or "0";
+		if style ~= last then
+			windows.set_consolecolor(winstylemap[style] or orig_color);
+			last = style;
+		end
+	end
+	if not orig_color then
+		function setstyle(style) end
+	end
+end
+
 return _M;
-- 
cgit v1.2.3