Session utility for nvim
first commit
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 |