Software /
code /
prosody
Comparison
util/termcolours.lua @ 3749:588c09d7903c
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 |
parent | 2923:b7049746bd29 |
child | 4698:739f7ae1a01e |
comparison
equal
deleted
inserted
replaced
3748:2237796ba228 | 3749:588c09d7903c |
---|---|
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; |