1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
local module = {}
module.fzfmru_filepath = os.getenv("XDG_CACHE_HOME") .. "/vis-fzf-mru"
module.fzfmru_path = "fzf"
module.fzfmru_args = "--height=40%"
module.fzfmru_history = 20
local function read_mru()
local mru = {}
local f = io.open(module.fzfmru_filepath)
if f == nil then return end
for line in f:lines() do table.insert(mru, line) end
f:close()
return mru
end
local function write_mru(win)
local file_path = win.file.path
local mru = read_mru()
-- check if mru data exists
if mru == nil then mru = {} end
-- check if we opened any file
if file_path == nil then return end
-- check duplicate
if file_path == mru[1] then return end
local f = io.open(module.fzfmru_filepath, "w+")
if f == nil then return end
table.insert(mru, 1, file_path)
for i, k in ipairs(mru) do
if i > module.fzfmru_history then break end
if i == 1 or k ~= file_path then
f:write(string.format("%s\n", k))
end
end
f:close()
end
vis.events.subscribe(vis.events.WIN_OPEN, write_mru)
vis:command_register("fzfmru", function(argv)
local command = "cat " .. module.fzfmru_filepath .. " | " ..
module.fzfmru_path .. " " .. module.fzfmru_args .. " " ..
table.concat(argv, " ")
local file = io.popen(command)
local output = file:read()
local _, _, status = file:close()
if status == 0 then
vis:command(string.format("e '%s'", output))
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, status))
end
vis:redraw()
return true
end)
return module
|