[情報] MushClient的複製含ANSI色碼文字 Plugin

看板mud_sanc (Sanctuary - 聖殿)作者 (hmml)時間12年前 (2013/05/26 14:12), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/3 (看更多)
出處: https://github.com/nickgammon/plugins/blob/master/aardwolf/Copy_Colour_Output.xml 這個 plugins 可以讓複製的內容從黑白變彩色,不過背景不行。 加載後,將要複製的部份反白,按Ctrl + 滑鼠左鍵,它會跳出一個功 能表:Copy With Colour,選下去就可以了。 有稍微修改一下local conversion和最後的if判斷,原稿是: local conversion = { [GetNormalColour (2)] = '@r', [GetNormalColour (3)] = "@g", [GetNormalColour (4)] = "@y", [GetNormalColour (5)] = "@b", [GetNormalColour (6)] = "@m", [GetNormalColour (7)] = "@c", [GetNormalColour (8)] = "@w", [GetBoldColour (2)] = "@R", [GetBoldColour (3)] = "@G", [GetBoldColour (4)] = "@Y", [GetBoldColour (5)] = "@B", [GetBoldColour (6)] = "@M", [GetBoldColour (7)] = "@C", [GetBoldColour (8)] = '@W', } -- end conversion table 和 if copystring:sub (-2) ~= "@w" then copystring = copystring .. "@w" end -- if newline at start =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- <?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE muclient> <!-- Plugin "CopyScript" generated by Plugin Wizard --> <!-- Amended slightly by Nick Gammon, from Worstje's version, on 17 Feb 2008 --> <muclient> <plugin name="Copy_Colour_Output" author="Nick Gammon" id="04d9e64f835452b045b427a7" language="Lua" purpose="Copies output with colour codes" save_state="n" date_written="2008-07-28" requires="4.00" version="1.1" > <description trim="y"> Copies text from the output window to the clipboard, with Aardwolf colour codes. To use: highlight text and then: Ctrl+D copy (like Ctrl+C but different) or: Ctrl + Left-click and select "Copy with Colour" </description> </plugin> <aliases> <alias match="Copy_With_Colour:04d9e64f835452b045b427a7" enabled="y" omit_from_output="y" sequence="100" script="CopyScript" name="Copy_With_Colour" menu="y" > </alias> </aliases> <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 -- how each colour is to appear (black is not supported on Aardwolf) local conversion = { [GetNormalColour (RED)] = ANSI (31, 40), [GetNormalColour (GREEN)] = ANSI (32, 40), [GetNormalColour (YELLOW)] = ANSI (33, 40), [GetNormalColour (BLUE)] = ANSI (34, 40), [GetNormalColour (MAGENTA)] = ANSI (35, 40), [GetNormalColour (CYAN)] = ANSI (36, 40), [GetNormalColour (WHITE)] = ANSI (0, 40), [GetBoldColour (RED)] = ANSI (31, 40,1), [GetBoldColour (GREEN)] = ANSI (32, 40,1), [GetBoldColour (YELLOW)] = ANSI (33, 40,1), [GetBoldColour (BLUE)] = ANSI (34, 40,1), [GetBoldColour (MAGENTA)] = ANSI (35, 40,1), [GetBoldColour (CYAN)] = ANSI (36, 40,1), [GetBoldColour (WHITE)] = ANSI (37, 40,1), } -- end conversion table function DoOneLine (styles, startcol, endcol) -- remove unneeded style runs at the start 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 -- nothing left? uh oh 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 -- fixup string first - change @ to @@ and ~ to @- local text = string.gsub (styles [1].text, "@", "@@") text = string.gsub (styles [1].text, "~", "@-") -- put code in front, if we can find one local code = conversion [styles [1].textcolour] if code then copystring = copystring .. code end -- if code found -- now the text copystring = copystring .. 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, last_line = GetSelectionStartLine(), math.min (GetSelectionEndLine(), GetLinesInBufferCount ()) local first_column, last_column = GetSelectionStartColumn(), 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, 40) then copystring = copystring .. ANSI (0, 40) end -- if newline at start -- finally can set clipboard contents SetClipboard(copystring) end -- function CopyScript AcceleratorTo ("Ctrl+D", "CallPlugin ('04d9e64f835452b045b427a7', 'CopyScript', '')", sendto.script) ]]> </script> </muclient> -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.132.196.45
文章代碼(AID): #1HeQUzd8 (mud_sanc)
文章代碼(AID): #1HeQUzd8 (mud_sanc)