Added a color copy option for mouse selection.
This commit is contained in:
		
							
								
								
									
										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"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
  
 | 
			
		||||
		Reference in New Issue
	
	Block a user