42 lines
897 B
Lua
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,
|
|
}
|