util.termcolours: Added setstyle(str), which works on Windows too.
authorWaqas Hussain <waqas20@gmail.com>
Tue, 14 Dec 2010 20:55:13 +0000 (01:55 +0500)
committerWaqas Hussain <waqas20@gmail.com>
Tue, 14 Dec 2010 20:55:13 +0000 (01:55 +0500)
util/termcolours.lua

index 4e267bee438fe2e7b4970b2c750d3d340001db36..df204688fada2690fcd098fc7494eba2ccfb3809 100644 (file)
 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;