aboutsummaryrefslogtreecommitdiffstats
path: root/init.lua
diff options
context:
space:
mode:
Diffstat (limited to 'init.lua')
-rw-r--r--init.lua84
1 files changed, 84 insertions, 0 deletions
diff --git a/init.lua b/init.lua
new file mode 100644
index 0000000..2b78d41
--- /dev/null
+++ b/init.lua
@@ -0,0 +1,84 @@
+-- Copyright (C) 2017 Guillaume Chérel
+--
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU Affero 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 Affero General Public License for more details.
+--
+-- You should have received a copy of the GNU Affero General Public License
+-- along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+module = {}
+module.fzf_path = "fzf"
+module.fzf_args = ""
+
+vis:command_register("fzf", function(argv, force, win, selection, range)
+ local command = string.gsub([[
+ $fzf_path \
+ --header="Enter:edit,^s:split,^v:vsplit" \
+ --expect="ctrl-s,ctrl-v" \
+ $fzf_args $args
+ ]],
+ '%$([%w_]+)', {
+ fzf_path=module.fzf_path,
+ fzf_args=module.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 success, msg, 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: Interrupted. Command %s exited with return value %i",
+ command, status
+ )
+ )
+ else
+ vis:info(
+ string.format(
+ "fzf-open: Unknown exit status %i. command %s exited with return value %i",
+ status, command, status
+ )
+ )
+ end
+
+ vis:feedkeys("<vis-redraw>")
+
+ return true;
+end, "Select file to open with fzf")
+
+return module