util.pluginloader: Return full file path from internal file loader on success, not...
[prosody.git] / util / termcolours.lua
index 6ab1b1fd21f1c3cb3f54ed714ebaebf509b068fc..df204688fada2690fcd098fc7494eba2ccfb3809 100644 (file)
@@ -1,26 +1,23 @@
--- Prosody IM v0.2
--- Copyright (C) 2008 Matthew Wild
--- Copyright (C) 2008 Waqas Hussain
+-- Prosody IM
+-- Copyright (C) 2008-2010 Matthew Wild
+-- Copyright (C) 2008-2010 Waqas Hussain
 -- 
--- This program is free software; you can redistribute it and/or
--- modify it under the terms of the GNU General Public License
--- as published by the Free Software Foundation; either version 2
--- of the License, or (at your option) any later version.
--- 
--- This program is distributed in the hope that it will be useful,
--- but WITHOUT ANY WARRANTY; without even the implied warranty of
--- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
--- GNU General Public License for more details.
--- 
--- You should have received a copy of the GNU General Public License
--- along with this program; if not, write to the Free Software
--- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+-- This project is MIT/X11 licensed. Please see the
+-- COPYING file in the source package for more information.
 --
 
 
 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 = {
@@ -30,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
@@ -50,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;