[情報] MushClient的複製含ANSI色碼文字 Plugin
看板mud_sanc (Sanctuary - 聖殿)作者hmml (hmml)時間12年前 (2013/05/26 14:12)推噓0(0推 0噓 0→)留言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
討論串 (同標題文章)
mud_sanc 近期熱門文章
PTT遊戲區 即時熱門文章
15
26