irongit

Session utility for nvim

first commit

huncholanehuncholaneauthored
commit 6de3e002a32e7d34bbd8a6644108c53566d49591Browse files

2 files changed, +45 -0

+44-0lua/sessions/init.lua
@@ -0,0 +1,44 @@
1+-- Unique session
2+local function getsessionfile()
3+ local cwd = vim.fn.getcwd()
4+ local hash = vim.fn.sha256(cwd)
5+ local sessiondir = vim.fn.stdpath("data") .. "/sessions"
6+ if vim.fn.isdirectory(sessiondir) == 0 then
7+ vim.fn.mkdir(sessiondir, "p")
8+ end
9+ return sessiondir .. "/" .. hash .. ".vim"
10+end
11+
12+local sessionfile = getsessionfile()
13+
14+-- Save session
15+local function save_session()
16+ vim.schedule(function()
17+ vim.cmd("mksession! " .. vim.fn.fnameescape(sessionfile))
18+ end)
19+end
20+
21+-- Restore session
22+local function restore_session()
23+ if vim.fn.filereadable(sessionfile) == 1 then
24+ vim.cmd("source " .. vim.fn.fnameescape(sessionfile))
25+ vim.cmd("doautocmd BufReadPost")
26+ end
27+end
28+
29+return {
30+ setup = function()
31+ vim.o.sessionoptions = "curdir,folds,tabpages,winsize,buffers"
32+ vim.o.undofile = true
33+ -- Autocmd: save on write
34+ vim.api.nvim_create_autocmd({ "BufWritePost", "VimLeavePre" }, {
35+ callback = save_session,
36+ })
37+
38+ -- Optional: auto-restore on start
39+ vim.api.nvim_create_autocmd("VimEnter", {
40+ once = true,
41+ callback = restore_session,
42+ })
43+ end,
44+}
+1-0sessions.nvim
@@ -0,0 +1 @@
1+/home/huncho/code/nvim-plugins/sessions.nvim