diff options
author | Raymaekers Luca <raymaekers.luca@gmail.com> | 2024-06-21 16:06:25 +0200 |
---|---|---|
committer | Raymaekers Luca <raymaekers.luca@gmail.com> | 2024-06-21 16:06:25 +0200 |
commit | 10e12bbe481af7974739060f51210f7948fc1df9 (patch) | |
tree | 83722aca11901a5bf7ad433aac6a6b0ba05cf79a /config/essentials/vis/fzf-open.lua | |
parent | 4775688e796faece72c6621bcd94f6eb4ebac5ff (diff) | |
parent | c9cc72113521b793d1baa0d2f558b97478a6acf4 (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.lua | 81 |
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 |