Mercurial > prosody-hg
comparison util/termcolours.lua @ 3869:692a428f57e7
util.termcolours: Added setstyle(str), which works on Windows too.
| author | Waqas Hussain <waqas20@gmail.com> |
|---|---|
| date | Wed, 15 Dec 2010 01:55:13 +0500 |
| parents | b7049746bd29 |
| children | 739f7ae1a01e |
comparison
equal
deleted
inserted
replaced
| 3868:72d68f996f45 | 3869:692a428f57e7 |
|---|---|
| 8 | 8 |
| 9 | 9 |
| 10 local t_concat, t_insert = table.concat, table.insert; | 10 local t_concat, t_insert = table.concat, table.insert; |
| 11 local char, format = string.char, string.format; | 11 local char, format = string.char, string.format; |
| 12 local ipairs = ipairs; | 12 local ipairs = ipairs; |
| 13 local io_write = io.write; | |
| 14 | |
| 15 local windows; | |
| 16 if os.getenv("WINDIR") then | |
| 17 windows = require "util.windows"; | |
| 18 end | |
| 19 local orig_color = windows and windows.get_consolecolor and windows.get_consolecolor(); | |
| 20 | |
| 13 module "termcolours" | 21 module "termcolours" |
| 14 | 22 |
| 15 local stylemap = { | 23 local stylemap = { |
| 16 reset = 0; bright = 1, dim = 2, underscore = 4, blink = 5, reverse = 7, hidden = 8; | 24 reset = 0; bright = 1, dim = 2, underscore = 4, blink = 5, reverse = 7, hidden = 8; |
| 17 black = 30; red = 31; green = 32; yellow = 33; blue = 34; magenta = 35; cyan = 36; white = 37; | 25 black = 30; red = 31; green = 32; yellow = 33; blue = 34; magenta = 35; cyan = 36; white = 37; |
| 18 ["black background"] = 40; ["red background"] = 41; ["green background"] = 42; ["yellow background"] = 43; ["blue background"] = 44; ["magenta background"] = 45; ["cyan background"] = 46; ["white background"] = 47; | 26 ["black background"] = 40; ["red background"] = 41; ["green background"] = 42; ["yellow background"] = 43; ["blue background"] = 44; ["magenta background"] = 45; ["cyan background"] = 46; ["white background"] = 47; |
| 19 bold = 1, dark = 2, underline = 4, underlined = 4, normal = 0; | 27 bold = 1, dark = 2, underline = 4, underlined = 4, normal = 0; |
| 20 } | 28 } |
| 29 | |
| 30 local winstylemap = { | |
| 31 ["0"] = orig_color, -- reset | |
| 32 ["1"] = 7+8, -- bold | |
| 33 ["1;33"] = 2+4+8, -- bold yellow | |
| 34 ["1;31"] = 4+8 -- bold red | |
| 35 } | |
| 21 | 36 |
| 22 local fmt_string = char(0x1B).."[%sm%s"..char(0x1B).."[0m"; | 37 local fmt_string = char(0x1B).."[%sm%s"..char(0x1B).."[0m"; |
| 23 function getstring(style, text) | 38 function getstring(style, text) |
| 24 if style then | 39 if style then |
| 25 return format(fmt_string, style, text); | 40 return format(fmt_string, style, text); |
| 37 end | 52 end |
| 38 end | 53 end |
| 39 return t_concat(result, ";"); | 54 return t_concat(result, ";"); |
| 40 end | 55 end |
| 41 | 56 |
| 57 local last = "0"; | |
| 58 function setstyle(style) | |
| 59 style = style or "0"; | |
| 60 if style ~= last then | |
| 61 io_write("\27["..style.."m"); | |
| 62 last = style; | |
| 63 end | |
| 64 end | |
| 65 | |
| 66 if windows then | |
| 67 function setstyle(style) | |
| 68 style = style or "0"; | |
| 69 if style ~= last then | |
| 70 windows.set_consolecolor(winstylemap[style] or orig_color); | |
| 71 last = style; | |
| 72 end | |
| 73 end | |
| 74 if not orig_color then | |
| 75 function setstyle(style) end | |
| 76 end | |
| 77 end | |
| 78 | |
| 42 return _M; | 79 return _M; |
