diff options
Diffstat (limited to 'config.dot/luakit.link/sessions.lua')
-rw-r--r-- | config.dot/luakit.link/sessions.lua | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/config.dot/luakit.link/sessions.lua b/config.dot/luakit.link/sessions.lua new file mode 100644 index 0000000..7daa6ed --- /dev/null +++ b/config.dot/luakit.link/sessions.lua @@ -0,0 +1,69 @@ +-- +-- Session management for luakit +-- By Silvio Rhatto <rhatto@riseup.net> +-- Using https://luakit.github.io/docs/modules/session.html +-- Inspired by https://github.com/IsoLinearCHiP/luakit-sessman +-- + +-- Requirements +local lfs = lfs +local info = info +local window = require "window" +local modes = require "modes" +local session = require "session" + +-- Base folder +function basedir() + return os.getenv("XDG_DATA_HOME") or os.getenv("HOME") .. "/.local/share" +end + +-- The directory where sessions are stored +local path = basedir() .. "/luakit/sessions/" +if not lfs.attributes(path) then lfs.mkdir(path) end + +-- Commands +modes.add_cmds({ + { ":sessionload, :sload, :loadsession, :openssession", "Load a session", function (w, a) + local file = path .. a.arg + session.session_file = file + + session.restore(false) + w:close_win() + end}, + { ":sessionsave, :ssave, :savesession", "Save a session", function (w, a) + local file = path .. a.arg + session.session_file = file + + session.save(file) + msg.info("Saved session at " .. file) + end}, + { ":sessionremove, :srm, :removesession", "Remove a session", function (w, a) + local file = path .. a.arg + session.session_file = nil + + local deleted = session.load(true, file) + end}, + { ":sessions", "Session manager", function (w) + local files = '' + + for file in lfs.dir(path) do + if not (file == "." or file == "..") then + files = files .. ' ' .. file + end + end + + w:notify("Available sessions:" .. files) + end }, +}) + +-- Bindings +modes.add_binds("normal", { + -- Quit and save session binding + { "^q$", "Quit and save current session", function (w) + session.save() + + for _, ww in pairs(window.bywidget) do + ww:close_win(true) + end + end}, +}) |