mirror of
https://github.com/folke/snacks.nvim
synced 2025-07-08 21:55:15 +00:00
66 lines
1.8 KiB
Lua
66 lines
1.8 KiB
Lua
local M = {}
|
|
|
|
---@param opts snacks.picker.proc.Config
|
|
---@type snacks.picker.finder
|
|
function M.cliphist(opts, ctx)
|
|
return require("snacks.picker.source.proc").proc({
|
|
opts,
|
|
{
|
|
cmd = "cliphist",
|
|
args = { "list" },
|
|
---@param item snacks.picker.finder.Item
|
|
transform = function(item)
|
|
local id, content = item.text:match("^(%d+)%s+(.+)$")
|
|
if id and content and not content:find("^%[%[%s+binary data") then
|
|
item.text = content
|
|
setmetatable(item, {
|
|
__index = function(_, k)
|
|
if k == "data" then
|
|
local data = vim.fn.system({ "cliphist", "decode", id })
|
|
rawset(item, "data", data)
|
|
if vim.v.shell_error ~= 0 then
|
|
error(data)
|
|
end
|
|
return data
|
|
elseif k == "preview" then
|
|
return {
|
|
text = item.data,
|
|
ft = "text",
|
|
}
|
|
end
|
|
end,
|
|
})
|
|
else
|
|
return false
|
|
end
|
|
end,
|
|
},
|
|
}, ctx)
|
|
end
|
|
|
|
---@param opts snacks.picker.proc.Config
|
|
---@type snacks.picker.finder
|
|
function M.man(opts, ctx)
|
|
return require("snacks.picker.source.proc").proc({
|
|
opts,
|
|
{
|
|
cmd = "man",
|
|
args = { "-k", "." },
|
|
---@param item snacks.picker.finder.Item
|
|
transform = function(item)
|
|
local page, section, desc = item.text:match("^(%S+)%s*%((%S-)%)%s+-%s+(.+)$")
|
|
if page and section and desc then
|
|
item.section = section
|
|
item.desc = desc
|
|
item.page = page
|
|
item.section = section
|
|
item.ref = ("%s(%s)"):format(item.page, item.section or 1)
|
|
else
|
|
return false
|
|
end
|
|
end,
|
|
},
|
|
}, ctx)
|
|
end
|
|
|
|
return M
|