48 lines
1.1 KiB
Lua
Executable file
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" }
|
|
}
|
|
}
|