util.termcolours: Added setstyle(str), which works on Windows too.

Wed, 15 Dec 2010 01:55:13 +0500

author
Waqas Hussain <waqas20@gmail.com>
date
Wed, 15 Dec 2010 01:55:13 +0500
changeset 3869
692a428f57e7
parent 3868
72d68f996f45
child 3870
84ee4a4ef7d5

util.termcolours: Added setstyle(str), which works on Windows too.

util/termcolours.lua file | annotate | diff | comparison | revisions
--- a/util/termcolours.lua	Wed Dec 15 01:53:33 2010 +0500
+++ b/util/termcolours.lua	Wed Dec 15 01:55:13 2010 +0500
@@ -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 @@
 			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 @@
 	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;

mercurial