精華區beta mud_sanc 關於我們 聯絡資訊
  小小修正之前不能複製背景色的缺點。注意:如果有用一些函數去修改 輸出內容的(如: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)