小小修正之前不能複製背景色的缺點。注意:如果有用一些函數去修改
輸出內容的(如:ColourNote、ColourTell),請不要使用ANSI所定義以外
的顏色(如:字色用pink、底色用cyan...等),會認不出來而判錯。
至於轉換表內容為何和 chat cap 的不一樣,因為,PcMan 的編輯器看
不懂重置碼,看不懂[m,也看不懂移位碼,它很陽春。
增加幾個不屬於ANSI定義的顏色,它們是 MUSHclient 的自定義色,你
可以在 Configuration > Apperance > Custom Colour 看見並修改它們,
這裡是儘量將這些顏色換成相近的 ANSI 顏色,當然不可能盡如人意。或者
,你可以在 Configuration > Appearance > ANSI Colour 頁面點選右上方
的 ANSI Colours... 按鈕,將自定義色套上 ANSI 色碼;想改回來,在
Configuration > Apperance > Custom Colour 頁面右上同樣有 Defaults
...可以調回來。
另外,還有兩個顏色,都是腳本錯誤回報時的顏色,這些請看註釋。
並修改轉換判斷,當顏色還是出現轉換表外的色碼時,這些顏色會先用
Silver 遞補。
-----------------------------------------------------------
<!-- Script -->
<script>
<![CDATA[
-- Thank you, Shaun Biggs, for taking your time to write the CopyScript
-- (formerly Copy2) function below. It was slightly altered by me to suit
-- my usage (wordwrapped lines and no \r\n at start of selection).
local BLACK = 1
local RED = 2
local GREEN = 3
local YELLOW = 4
local BLUE = 5
local MAGENTA = 6
local CYAN = 7
local WHITE = 8
-- 顏色表
local conversion= {
['black'] = ANSI(0)..ANSI (30),
['maroon'] = ANSI(0)..ANSI (31),
['#804040'] = ANSI(0)..ANSI (31), --custom10
['green'] = ANSI(0)..ANSI (32), --custom15
['olive'] = ANSI(0)..ANSI (33),
['#FF8040'] = ANSI(0)..ANSI (33), --custom11
['burlywood'] = ANSI(0)..ANSI (33), --硬木色,腳本錯誤明細:位置。
['navy'] = ANSI(0)..ANSI (34),
['#004080'] = ANSI(0)..ANSI (34), --custom13
['purple'] = ANSI(0)..ANSI (35),
['#FF80C0'] = ANSI(0)..ANSI (35), --custom6
['teal'] = ANSI(0)..ANSI (36), --custom12
['silver'] = ANSI(0)..ANSI (37),
--以下高亮
['gray'] = ANSI (30,1),
['red'] = ANSI (31,1), --custom7
['orangered'] = ANSI (31,1), --橙紅,腳本錯誤明細:說明。
['#FF8080'] = ANSI (31,1), --custom1
['lime'] = ANSI (32,1),
['#80FF80'] = ANSI (32,1), --custom3
['yellow'] = ANSI (33,1),
['#FFFF80'] = ANSI (33,1), --custom2
['blue'] = ANSI (34,1), --custom16
['#0080FF'] = ANSI (34,1), --custom5
['#0080C0'] = ANSI (34,1), --custom8
['magenta'] = ANSI (35,1), --custom9
['#FF0080'] = ANSI (35,1), --custom14
['cyan'] = ANSI (36,1),
['#80FFFF'] = ANSI (36,1), --custom4
['white'] = ANSI (37,1),
} -- 前景
local BACKconversion= {
['black'] = ANSI (40), --黑色。
['gray'] = ANSI (40), --如果出現底色灰
['maroon'] = ANSI (41), --栗色。
['red'] = ANSI (41), --如果出現底色紅,Script 檔未掛上時的報錯。
['green'] = ANSI (42), --綠色。
['lime'] = ANSI (42), --如果出現底色鮮綠。
['olive'] = ANSI (43), --橄欖色。
['yellow'] = ANSI (43), --如果出現底色黃。
['navy'] = ANSI (44), --海軍藍。
['blue'] = ANSI (44), --如果出現底色藍。
['purple'] = ANSI (45), --紫色。
['magenta'] = ANSI (45), --如果出現底色洋紅。
['teal'] = ANSI (46), --鴨綠色,技能進步訊息的顏色。
['cyan'] = ANSI (46), --如果出現底色青。
['silver'] = ANSI (47), --銀色,正常字色。
['white'] = ANSI (47), --如果出現底色白。
} --背景
--轉換色碼
function DoOneLine (styles, startcol, endcol)
while next (styles) and startcol > styles [1].length do
startcol = startcol - styles [1].length
endcol = endcol - styles [1].length
table.remove (styles, 1)
end -- do
if not next (styles) then return end
-- discard unwanted part of first good style
if startcol > 1 then
styles [1].length = styles [1].length - startcol
endcol = endcol - startcol + 1
styles [1].text = styles [1].text:sub (startcol)
startcol = 1
end -- if
-- copy appropriate styles and codes into the output
while next (styles) do
local len = endcol - startcol + 1
if len < 0 or endcol < 1 then
return
end -- done
-- last style?
if len < styles [1].length then
styles [1].length = len
styles [1].text = styles [1].text:sub (1, len)
end -- if last style
-- put code in front, if we can find one
if conversion [RGBColourToName (styles[1].textcolour)] ~= nil then
code = conversion [RGBColourToName (styles[1].textcolour)]..
BACKconversion[RGBColourToName (styles[1].backcolour)]
else
code = conversion ['silver']..
BACKconversion[RGBColourToName (styles[1].backcolour)]
end
if code then
copystring = copystring .. code
end -- if code found
-- now the text
copystring = copystring .. styles [1].text
-- less to go now
endcol = endcol - styles [1].length
-- done this style
table.remove (styles, 1)
end -- while
end -- 函數:DoOneLine 結尾
--函數:複製內容
function CopyScript(name, line, wildcs)
-- find selection in output window, if any
local first_line = GetSelectionStartLine()
local last_line = math.min (GetSelectionEndLine(), GetLinesInBufferCount ())
local first_column = GetSelectionStartColumn()
local last_column = GetSelectionEndColumn()
-- nothing selected, do normal copy
if first_line <= 0 then
DoCommand("copy")
return
end -- if nothing to copy from output window
copystring = ""
-- iterate to build up copy text
for line = first_line, last_line do
if line < last_line then
DoOneLine (GetStyleInfo(line), first_column, GetLineInfo(line).length)
first_column = 1
-- Is this a new line or merely the continuation of a paragraph?
if GetLineInfo (line, 3) then
copystring = copystring .. "\r\n"
end -- new line
else
DoOneLine (GetStyleInfo(line), first_column, last_column)
end -- if
end -- for loop
-- Get rid of a spurious extra new line at the start.
if copystring:sub (1, 2) == "\r\n" then
copystring = copystring:sub (3)
end -- if newline at start
if copystring:sub (-2) ~= ANSI (0) then
copystring = copystring .. ANSI (0)
end -- if newline at start
-- finally can set clipboard contents
SetClipboard(copystring)
end -- function CopyScript
AcceleratorTo ("Ctrl+D",
"CallPlugin ('04d9e64f835452b045b427a7',
'CopyScript',
'')",
sendto.script)
]]>
</script>
-----------------------------------------------------------
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.132.196.45
※ 編輯: hmml 來自: 220.132.196.45 (10/06 08:27)