diff options
author | Waqas Hussain <waqas20@gmail.com> | 2010-12-15 01:55:13 +0500 |
---|---|---|
committer | Waqas Hussain <waqas20@gmail.com> | 2010-12-15 01:55:13 +0500 |
commit | 9610cf338eb615e9b7b495818e0901c38dd99ff7 (patch) | |
tree | 87f74da0461a5febdc2063a567b01bd8970c2b94 /util/termcolours.lua | |
parent | d3aac67ca6730108e857ef1202ae81c844252dad (diff) | |
download | prosody-9610cf338eb615e9b7b495818e0901c38dd99ff7.tar.gz prosody-9610cf338eb615e9b7b495818e0901c38dd99ff7.zip |
util.termcolours: Added setstyle(str), which works on Windows too.
Diffstat (limited to 'util/termcolours.lua')
-rw-r--r-- | util/termcolours.lua | 37 |
1 files changed, 37 insertions, 0 deletions
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; |