diff options
Diffstat (limited to 'init.lua')
-rw-r--r-- | init.lua | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..888ff8e --- /dev/null +++ b/init.lua @@ -0,0 +1,58 @@ +local M = {} +local cursors = {} +M.path = os.getenv('HOME') .. '/.cursors' + +function apply_cursor_pos(win) + if win.file == nil or win.file.path == nil then return end + local pos = cursors[win.file.path] + if pos == nil then return end + win.selection.pos = tonumber(pos) + vis:feedkeys("zz") +end + +function file_exists(path) + local f = io.open(path) + if f == nil then return false + else f:close() return true + end +end + +function read_cursors() + cursors = {} + local f = io.open(M.path) + if f == nil then return end + for line in f:lines() do + for k, v in string.gmatch(line, '(.+)%s(%d+)') do + cursors[k] = v + end + end + f:close() + for win in vis:windows() do + apply_cursor_pos(win) + end +end + +function write_cursors() + local f = io.open(M.path, 'w+') + if f == nil then return end + local a = {} + for k in pairs(cursors) do table.insert(a, k) end + table.sort(a) + for i,k in ipairs(a) do + f:write(string.format('%s %d\n', k, cursors[k])) + end + f:close() +end + +function set_cursor_pos(win) + if win.file == nil or win.file.path == nil then return end + if not file_exists(win.file.path) then return end + cursors[win.file.path] = win.selection.pos +end + +vis.events.subscribe(vis.events.INIT, read_cursors) +vis.events.subscribe(vis.events.WIN_OPEN, apply_cursor_pos) +vis.events.subscribe(vis.events.WIN_CLOSE, set_cursor_pos) +vis.events.subscribe(vis.events.QUIT, write_cursors) + +return M |