Ansi 终端颜色

lua-users home
wiki

2009 年的一个早晨,有人在 IRC 上问如何在控制台上使用颜色,于是 Rob Hoelz 决定快速编写一个用于 ANSI 终端颜色操作的模块 [1]。Enrique Garc�a 在 2011 年发布的版本 (luarocks install ansicolors),虽然基于下面的代码,但背景名称和用户界面有所不同 (luarocks doc ansicolors)。

以下是 Rob 的原始版本

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

以下是一些使用它的方法

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


最近更改 · 偏好设置
编辑 · 历史记录
最后编辑于 2015 年 4 月 29 日上午 6:25 GMT (差异)