Mush端颜色处理
本帖最后由 suwuji 于 2021-11-29 10:45 PM 编辑使用范例:
脚本调用
cprint("$HIG$你$HIY$好") --本地输出
sprint("$HIG$你$HIY$好") --模拟服务端信息
--当前行内色彩替换
recolor("aqua","yellow") --触发器当前行色彩修改,调试好后勾选屏蔽显示
--[[
cprint.lua
]]
function cprint_ansi_color_init()
local ESC = '\27'
return {
-- 前景色
BLK = ESC.."[30m", -- 黑色
RED = ESC.."[31m", -- 红色
GRN = ESC.."[32m", -- 绿色
YEL = ESC.."[33m", -- 黄色
BLU = ESC.."[34m", -- 蓝色
MAG = ESC.."[35m", -- 紫色
CYN = ESC.."[36m", -- 青色
WHT = ESC.."[37m", -- 白色
-- 加强前景色
GRA = ESC.."[1;30m", -- 灰色
HIR = ESC.."[1;31m", -- 亮红
HIG = ESC.."[1;32m", -- 亮绿
HIY = ESC.."[1;33m", -- 亮黄
HIB = ESC.."[1;34m", -- 亮蓝
HIM = ESC.."[1;35m", -- 亮紫
HIC = ESC.."[1;36m", -- 亮青
HIW = ESC.."[1;37m", -- 亮白
-- 背景色
BBLK = ESC.."[40m", --黑色
BRED = ESC.."[41m", --红色
BGRN = ESC.."[42m", --绿色
BYEL = ESC.."[43m", -- 黄色
BBLU = ESC.."[44m", --蓝色
BMAG = ESC.."[45m", --紫色
BCYN = ESC.."[46m", --青色
BWHT = ESC.."[47m", -- 白色
-- 加强背景色,一般不用会引起前景变色
HBRED = ESC.."[41;1m", -- 亮红
HBGRN = ESC.."[42;1m", -- 亮绿
HBYEL = ESC.."[43;1m", -- 亮黄
HBBLU = ESC.."[44;1m", -- 亮蓝
HBMAG = ESC.."[45;1m", -- 亮紫
HBCYN = ESC.."[46;1m", -- 亮青
HBWHT = ESC.."[47;1m", -- 亮白
--字形控
B = ESC.."[1m", --加重
I = ESC.."[3m", --斜体
U = ESC.."[4m", --下划线
REV = ESC.."[7m", --反色
HIREV = ESC.."[1;7m", --高亮反色
BLINK = ESC.."[5m", --闪烁,mushclient里BLINK和I显示一致
CROSS = ESC.."[9m", --删除线
-- 返回普通
NOR = ESC.."[2;37;0m",
}
end
if ansi_color==nil then ansi_color = cprint_ansi_color_init() end
function ansi(str)
if str==nil or str=="%$" or str=="nil" then return "" end
local s,e = string.find(str,"%$([^%$]+)%$")
if s~=nil and e~=nil then
local mc = string.sub(str,s+1,e-1)
if ansi_color==nil then
print("$"..mc..'$没有此颜色定义!可用的有:\n')
for k,v in pairs(ansi_color) do
print("$"..k.."$")
end
print('\n')
return ansi(string.sub(str,1,s-1))..ansi(string.sub(str,e+1))
else
return ansi(string.sub(str,1,s-1))..ansi_color..ansi(string.sub(str,e+1))
end
else
return str
end
end
----获取当前行的styles--
function styles()
return GetStyleInfo(GetLinesInBufferCount())
end
----获取当前行info--
function infos()
return GetLineInfo(GetLinesInBufferCount())
end
----当前行色彩数--
function styles_count()
return table.getn(styles())
end
function rgbname(color)
return RGBColourToName(color)
end
--
function debugcolor()
local sall = styles()
for k,v in ipairs(sall) do
ColourTell(RGBColourToName(v.textcolour),RGBColourToName(v.backcolour),v.text)
end
ColourNote(0,0,"")
for k,v in ipairs(sall) do
print(RGBColourToName(v.textcolour)..","..RGBColourToName(v.backcolour).."=>"..v.text)
end
end
--色彩文字替换显示函数(自定义显示效果)
function recolor(textcolour,new_textcolour,backcolour,new_backcolour,text,new_text)
if textcolour==nil and backcolour==nil and text==nil then
debugcolor()
return
end
local sall = styles()
for k,v in ipairs(sall) do
local forecolor = ""
local backcolor = ""
local tt = ""
if textcolour and textcolour==RGBColourToName(v.textcolour) then
forecolor = new_textcolour
else
forecolor = RGBColourToName(v.textcolour)
end
if backcolour and backcolour==RGBColourToName(v.backcolour) then
backcolor = new_backcolour
else
backcolor = RGBColourToName(v.backcolour)
end
if text and text==v.text then
--替换
if new_text~=nil then
tt = new_text
else
tt = v.text
end
else
--不替换
tt = v.text
end
ColourTell(forecolor,backcolor,tt)
end
ColourNote(0,0,"")
end
----本地彩色文字输出(提示用)--
function cprint(str)
AnsiNote(ansi(str)..ansi_color.NOR)
end
----模拟服务端文字输出(可触发)--
function sprint(str)
Simulate(ansi(str)..ansi_color.NOR)
end
功能不错,支持一下~
页:
[1]