Files
plugins/diff.yazi/main.lua
2025-12-31 16:04:33 +08:00

42 lines
897 B
Lua

--- @since 25.2.7
local function info(content)
return ya.notify {
title = "Diff",
content = content,
timeout = 5,
}
end
local selected_path = ya.sync(function()
for _, u in pairs(cx.active.selected) do
return u.cache or u
end
end)
local hovered_path = ya.sync(function()
local h = cx.active.current.hovered
return h and (h.path or h.url) -- TODO: remove "or h.url"
end)
return {
entry = function()
local a, b = selected_path(), hovered_path()
if not a then
return info("No file selected")
elseif not b then
return info("No file hovered")
end
local output, err = Command("diff"):arg("-Naur"):arg(tostring(a)):arg(tostring(b)):output()
if not output then
return info("Failed to run diff, error: " .. err)
elseif output.stdout == "" then
return info("No differences found")
end
ya.clipboard(output.stdout)
info("Diff copied to clipboard")
end,
}