Ansi Terminal Colors

lua-users home
wiki

Someone on IRC asked how to do colors on a console this morning, so I decided to whip up a quick module for ANSI terminal color manipulation [1].

Here it is:

local pairs = pairs

local tostring = tostring

local setmetatable = setmetatable

local schar = string.char



module 'ansicolors'



local colormt = {}



function colormt:__tostring()

    return self.value

end



function colormt:__concat(other)

    return tostring(self) .. tostring(other)

end



function colormt:__call(s)

    return self .. s .. _M.reset

end



colormt.__metatable = {}



local function makecolor(value)

    return setmetatable({ value = schar(27) .. '[' .. tostring(value) .. 'm' }, colormt)

end



local colors = {

    -- attributes

    reset = 0,

    clear = 0,

    bright = 1,

    dim = 2,

    underscore = 4,

    blink = 5,

    reverse = 7,

    hidden = 8,



    -- foreground

    black = 30,

    red = 31,

    green = 32,

    yellow = 33,

    blue = 34,

    magenta = 35,

    cyan = 36,

    white = 37,



    -- background

    onblack = 40,

    onred = 41,

    ongreen = 42,

    onyellow = 43,

    onblue = 44,

    onmagenta = 45,

    oncyan = 46,

    onwhite = 47,

}



for c, v in pairs(colors) do

    _M[c] = makecolor(v)

end

And here's some ways you can use it:

require "ansicolors"



print(ansicolors.red .. 'hello from the Red world!' .. ansicolors.reset)

print(ansicolors.blue .. 'go blue!' .. ansicolors.clear) -- clear is a synonym for reset

print(ansicolors.underscore .. colors.yellow .. colors.onblue .. 'crazy stuff' .. ansicolors.reset)

print(ansicolors.red 'no need to worry about resetting here!') -- functional interface


RecentChanges · preferences
edit · history
Last edited January 17, 2010 4:36 pm GMT (diff)