local Utils = require("avante.utils") ---@class AvanteClipboard local M = {} M.clip_cmd = nil M.get_clip_cmd = function() if M.clip_cmd then return M.clip_cmd end -- Wayland if os.getenv("WAYLAND_DISPLAY") ~= nil and vim.fn.executable("wl-paste") == 1 then M.clip_cmd = "wl-paste" -- X11 elseif os.getenv("DISPLAY") ~= nil and vim.fn.executable("xclip") == 1 then M.clip_cmd = "xclip" end return M.clip_cmd end M.has_content = function() local cmd = M.get_clip_cmd() ---@type vim.SystemCompleted local output -- X11 if cmd == "xclip" then output = Utils.shell_run("xclip -selection clipboard -t TARGETS -o") return output.code == 0 and output.stdout:find("image/png") ~= nil elseif cmd == "wl-paste" then output = Utils.shell_run("wl-paste --list-types") return output.code == 0 and output.stdout:find("image/png") ~= nil end Utils.warn("Failed to validate clipboard content", { title = "Avante" }) return false end M.get_content = function() local cmd = M.get_clip_cmd() ---@type vim.SystemCompleted local output if cmd == "xclip" then output = Utils.shell_run("xclip -selection clipboard -o -t image/png | base64 | tr -d '\n'") if output.code == 0 then return output.stdout end elseif cmd == "osascript" then output = Utils.shell_run("wl-paste --type image/png | base64 | tr -d '\n'") if output.code == 0 then return output.stdout end end error("Failed to get clipboard content") end return M