dippin-dotfiles/.config/xplr/fzf.lua
2025-04-26 14:35:51 -06:00

48 lines
1.1 KiB
Lua
Executable file

-- Basic fzf search integration for xplr
-- Requires fzf (obviously), and bat for the preview
---@diagnostic disable
local xplr = xplr
---@diagnostic enable
local fzf = function()
-- xplr.util.shell_execute doesn't work here since fzf needs an actual tty
local p = io.popen("fzf --preview='bat --color=always {}'", "r")
local output = p:read("*a")
p:close()
local lines = {}
for line in output:gmatch("[^\r\n]+") do
table.insert(lines, line)
end
local count = #lines
if count == 0 then
return
else
local path = lines[1]
local msgs = { { FocusPath = path } }
local isdir = xplr.util.shell_execute("test", { "-d", path }).returncode == 0
if isdir then
table.insert(msgs, "Enter")
else
table.insert(msgs, "PrintFocusPathAndQuit")
end
return msgs
end
end
xplr.fn.custom.fzf = {}
xplr.fn.custom.fzf.search = function(_)
return fzf()
end
xplr.config.modes.builtin.default.key_bindings.on_key["f"] = {
help = "fzf search",
messages = {
"PopMode",
{ CallLua = "custom.fzf.search" }
}
}