diff --git a/lua/nivvie/config.lua b/lua/nivvie/config.lua new file mode 100644 index 0000000..53732e2 --- /dev/null +++ b/lua/nivvie/config.lua @@ -0,0 +1,42 @@ +local config = {} + +---@class nivvie.config.proto +---@field session_dir? string +---@field autosave? boolean +---@field autorestore? boolean + +---@class nivvie.config +---@field session_dir string +---@field autosave boolean +---@field autorestore boolean + +---@type nivvie.config +config.default = { + -- where sessions are stored + session_dir = vim.fn.stdpath 'state' .. '/sessions', + -- save on exit + autosave = true, + -- load on start + autorestore = true, +} + +---@type nivvie.config.proto +config.current = {} + +---@return nivvie.config +function config.get() + return vim.tbl_deep_extend('force', config.default, config.current) +end + +---@param cfg nivvie.config.proto +---@return nivvie.config +function config.override(cfg) + return vim.tbl_deep_extend('force', config.default, cfg) +end + +---@param cfg nivvie.config.proto +function config.set(cfg) + config.current = cfg +end + +return config diff --git a/lua/nivvie/init.lua b/lua/nivvie/init.lua new file mode 100644 index 0000000..0666df9 --- /dev/null +++ b/lua/nivvie/init.lua @@ -0,0 +1,9 @@ +local nivvie = {} + +---@param cfg? nivvie.config +function nivvie.setup(cfg) + cfg = cfg or {} + require('nivvie.config').set(cfg) +end + +return nivvie diff --git a/plugin/nivvie.lua b/plugin/nivvie.lua index 54fbbcc..db250e2 100644 --- a/plugin/nivvie.lua +++ b/plugin/nivvie.lua @@ -15,11 +15,9 @@ function session.get_uri() end) end -local sessiondir = vim.g.sessiondir - or vim.fs.joinpath(vim.fn.stdpath 'state', 'sessions') - ---@param name? string function session.get_path(name) + local sessiondir = require('nivvie.config').get().session_dir return vim.fs.joinpath(sessiondir, (name or session.get_uri()) .. '.vim') end @@ -27,6 +25,7 @@ end function session.save(name) local session_file = session.get_path(name) + local sessiondir = require('nivvie.config').get().session_dir vim.fn.mkdir(sessiondir, 'p') vim.api.nvim_cmd({ @@ -45,7 +44,7 @@ function session.clean() end ---@param name? string -function session.load(name) +function session.restore(name) local path = session.get_path(name) if vim.uv.fs_stat(path) then vim.api.nvim_cmd({ @@ -58,7 +57,7 @@ end ---- -function session.shouldload() +function session.isemptysession() if session.stdin then return false end @@ -78,12 +77,17 @@ function session.shouldload() return #bufs == 0 end ---- only load if necessary -function session.autoload() - if not session.shouldload() then +--- only restore if necessary +function session.autorestore() + if not require('nivvie.config').get().autorestore then + return + end + + if not session.isemptysession() then return end - session.load() + + session.restore() end local group = vim.api.nvim_create_augroup('nivvie', { clear = true }) @@ -91,6 +95,9 @@ local group = vim.api.nvim_create_augroup('nivvie', { clear = true }) vim.api.nvim_create_autocmd({ 'VimLeavePre' }, { group = group, callback = function() + if not require('nivvie.config').get().autosave then + return + end session.clean() session.save() end, @@ -108,8 +115,8 @@ vim.schedule(function() if args.fargs[1] == 'save' then session.save(args.fargs[2]) return - elseif args.fargs[1] == 'load' then - session.load(args.fargs[2]) + elseif args.fargs[1] == 'restore' then + session.restore(args.fargs[2]) return elseif args.fargs[1] == 'delete' then local path = session.get_path(args.fargs[2]) @@ -121,7 +128,7 @@ vim.schedule(function() complete = function() return { 'save', - 'load', + 'restore', 'delete', } end, @@ -132,7 +139,7 @@ end) if vim.v.vim_did_enter > 0 then vim.schedule(function() - session.autoload() + session.autorestore() end) return end @@ -141,9 +148,9 @@ vim.api.nvim_create_autocmd({ 'VimEnter' }, { group = group, callback = function() vim.schedule(function() - session.autoload() + session.autorestore() end) end, }) -return session +return