Added a color copy option for mouse selection.
This commit is contained in:
parent
3501809446
commit
96799150c2
55
src/scripts/color-copy/color-copy.lua
Normal file
55
src/scripts/color-copy/color-copy.lua
Normal file
@ -0,0 +1,55 @@
|
||||
-- Abort if the API isn't available. Mouse events become available on Mudlet version 4.13.
|
||||
if addMouseEvent == nil then return end
|
||||
|
||||
function rgbToHex(r,g,b)
|
||||
local rgb = (r * 0x10000) + (g * 0x100) + b
|
||||
return string.format("%x", rgb)
|
||||
end
|
||||
|
||||
local baseAnsiMap = {"&x","&r","&g","&O","&b","&p","&c","&w","&z","&R","&G","&Y","&B","&P","&C","&W"}
|
||||
local colorCodes = {}
|
||||
|
||||
-- Map basic ANSI set
|
||||
for i=0,15 do
|
||||
local hex = rgbToHex(unpack(color_table["ansi_" .. string.format("%03d", i)]))
|
||||
colorCodes[hex] = baseAnsiMap[i + 1]
|
||||
end
|
||||
|
||||
-- Map the rest of 256 colors
|
||||
for i=16,255 do
|
||||
local numStr = string.format("%03d", i)
|
||||
local hex = rgbToHex(unpack(color_table["ansi_" .. numStr]))
|
||||
colorCodes[hex] = "&" .. numStr
|
||||
end
|
||||
|
||||
addMouseEvent("Copy with colors", "onCopyWithColors")
|
||||
|
||||
function onCopyWithColors(event, menu, window, startCol, startRow, endCol, endRow)
|
||||
if startCol == endCol and startRow == endRow then return end
|
||||
local parsed = ""
|
||||
local lastColor = nil
|
||||
for l = startRow, endRow do
|
||||
local cStart = l == startRow and startCol or 0
|
||||
moveCursor(window, cStart, l)
|
||||
local cEnd = l == endRow and endCol or #getCurrentLine() - 1
|
||||
for c = cStart, cEnd do
|
||||
selectSection(window, c, 1)
|
||||
local symbol = getSelection(window) or ""
|
||||
-- escape the tag symbol
|
||||
if symbol == "&" then symbol = "&&" end
|
||||
local color = rgbToHex(getFgColor(window))
|
||||
if color == lastColor then
|
||||
parsed = parsed .. symbol
|
||||
else
|
||||
lastColor = color
|
||||
-- Check whether the color is in the 256 set. Use gray (&w) for undefined colors.
|
||||
local cc = colorCodes[color] or "&w"
|
||||
parsed = parsed .. cc .. symbol
|
||||
end
|
||||
end
|
||||
if l ~= endRow then parsed = parsed .. "\n" end
|
||||
end
|
||||
setClipboardText(parsed)
|
||||
end
|
||||
|
||||
registerAnonymousEventHandler("onCopyWithColors", "onCopyWithColors")
|
6
src/scripts/color-copy/scripts.json
Normal file
6
src/scripts/color-copy/scripts.json
Normal file
@ -0,0 +1,6 @@
|
||||
[
|
||||
{
|
||||
"name": "color-copy"
|
||||
}
|
||||
]
|
||||
|
Loading…
Reference in New Issue
Block a user