summaryrefslogtreecommitdiff
path: root/config/essentials/vis/fzf-open.lua
diff options
context:
space:
mode:
authorRaymaekers Luca <raymaekers.luca@gmail.com>2024-06-21 16:06:25 +0200
committerRaymaekers Luca <raymaekers.luca@gmail.com>2024-06-21 16:06:25 +0200
commit10e12bbe481af7974739060f51210f7948fc1df9 (patch)
tree83722aca11901a5bf7ad433aac6a6b0ba05cf79a /config/essentials/vis/fzf-open.lua
parent4775688e796faece72c6621bcd94f6eb4ebac5ff (diff)
parentc9cc72113521b793d1baa0d2f558b97478a6acf4 (diff)
Merge branch 'main' of debuc.com:dotfiles
Diffstat (limited to 'config/essentials/vis/fzf-open.lua')
-rw-r--r--config/essentials/vis/fzf-open.lua81
1 files changed, 81 insertions, 0 deletions
diff --git a/config/essentials/vis/fzf-open.lua b/config/essentials/vis/fzf-open.lua
new file mode 100644
index 0000000..1c9d1e6
--- /dev/null
+++ b/config/essentials/vis/fzf-open.lua
@@ -0,0 +1,81 @@
+-- Copyright (C) 2017 Guillaume Chérel
+-- Copyright (C) 2023 Matěj Cepl
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU Lesser General Public License as
+-- published by the Free Software Foundation, either version 3 of the
+-- License, or (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU Lesser General Public License for more details.
+--
+-- You should have received a copy of the GNU Lesser General Public License
+-- along with this program. If not, see <https://www.gnu.org/licenses/>.
+local M = {}
+
+M.fzf_path = "fzf"
+M.fzf_args = "--height=40%"
+
+vis:command_register("fzf", function(argv)
+ local fzf_path = M.fzf_path
+ if argv[1] == "--search-path" then
+ table.remove(argv, 1)
+ local dir = table.remove(argv, 1)
+ fzf_path = ([[FZF_DEFAULT_COMMAND="$FZF_DEFAULT_COMMAND --search-path ]] .. dir .. [[" fzf]])
+ end
+
+ local command = string.gsub(
+ [[
+ $fzf_path \
+ --header="Enter:edit,^s:split,^v:vsplit" \
+ --expect="ctrl-s,ctrl-v" \
+ $fzf_args $args
+ ]],
+ "%$([%w_]+)",
+ {
+ fzf_path = fzf_path,
+ fzf_args = M.fzf_args,
+ args = table.concat(argv, " "),
+ }
+ )
+
+ local file = io.popen(command)
+ local output = {}
+ for line in file:lines() do
+ table.insert(output, line)
+ end
+ local _, _, status = file:close()
+
+ if status == 0 then
+ local action = "e"
+
+ if output[1] == "ctrl-s" then
+ action = "split"
+ elseif output[1] == "ctrl-v" then
+ action = "vsplit"
+ end
+
+ vis:feedkeys(string.format(":%s '%s'<Enter>", action, output[2]))
+ elseif status == 1 then
+ vis:info(string.format("fzf-open: No match. Command %s exited with return value %i.", command, status))
+ elseif status == 2 then
+ vis:info(string.format("fzf-open: Error. Command %s exited with return value %i.", command, status))
+ elseif status ~= 130 then
+ vis:info(
+ string.format(
+ "fzf-open: Unknown exit status %i. command %s exited with return value %i",
+ status,
+ command,
+ status
+ )
+ )
+ end
+
+ vis:redraw()
+
+ return true
+end, "Select file to open with fzf")
+
+return M