# HG changeset patch # User Waqas Hussain # Date 1292360113 -18000 # Node ID 692a428f57e7984887e7baf4070b8463a5e1c592 # Parent 72d68f996f4568b20e3855a7daa97a9238621c02 util.termcolours: Added setstyle(str), which works on Windows too. diff -r 72d68f996f45 -r 692a428f57e7 util/termcolours.lua --- 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;