return { 'rmagatti/auto-session', lazy = false, config = function() local auto_session = require('auto-session') auto_session.setup({ auto_save = false, auto_restore = false, post_restore_cmds = { function () local buf_exists = function(bufname) for _, buf in ipairs(vim.fn.getbufinfo({ bufloaded = true })) do if buf.name:match(bufname) then return true end end return false end -- If NvimTree was opened when the session was saved, show it if buf_exists('NvimTree_') then local nvim_tree_api = require('nvim-tree.api') nvim_tree_api.tree.reload() nvim_tree_api.tree.open() end end } }) local opts = { silent = true, noremap = true } local function git_branch() local branch = vim.trim(vim.fn.system('git branch --show-current 2>/dev/null')) if vim.v.shell_error ~= 0 or branch == '' then return nil end return branch end local function session_save() local branch = git_branch() if branch then vim.cmd('AutoSession save ' .. branch) else vim.cmd('AutoSession save') end end local function session_restore() local branch = git_branch() if branch then vim.cmd('AutoSession restore ' .. branch) else vim.cmd('AutoSession restore') end end local keymap = vim.keymap keymap.set('n', 'ss', session_save, opts) keymap.set('n', 'sq', function() session_save(); vim.cmd('wa | qa') end, opts) keymap.set('n', 'sl', 'AutoSession search', opts) keymap.set('n', 'sr', session_restore, opts) keymap.set('n', 'sd', 'AutoSession delete', opts) local function named_save() vim.ui.input({ prompt = 'Enter Session name: ' }, function(input) auto_session.SaveSession(input) end) end keymap.set('n', 'sS', named_save, opts) local wk = require('which-key') wk.add({ { 's', group = 'auto-session' }, { 'ss', desc = 'SessionSave' }, { 'sS', desc = 'NamedSessionSave' }, { 'sq', desc = 'Save and Quit' }, { 'sl', desc = 'SessionList (SessionSearch)'}, { 'sr', desc = 'SessionRestore'}, { 'sd', desc = 'SessionDelete'}, }) end, }