From 07bb62583769abd9d32f88f428ea58248730ac7a Mon Sep 17 00:00:00 2001 From: Ali Shahid <41078534+shaeinst@users.noreply.github.com> Date: Sat, 27 Jan 2024 23:56:48 +0545 Subject: [PATCH] Implement action selection menu for :SessionManager (#109) Co-authored-by: Ali Shahid --- lua/session_manager/init.lua | 18 ++++++++++++++++++ lua/session_manager/subcommands.lua | 4 ++++ plugin/session_manager.lua | 2 +- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/lua/session_manager/init.lua b/lua/session_manager/init.lua index cbe24ab..02af1b5 100644 --- a/lua/session_manager/init.lua +++ b/lua/session_manager/init.lua @@ -7,6 +7,24 @@ local session_manager = {} ---@param values table function session_manager.setup(values) setmetatable(config, { __index = vim.tbl_extend('force', config.defaults, values) }) end +-- Displays action selection menu for :SessionManager +function session_manager.available_commands() + local commands = {} + for cmd, _ in pairs(session_manager) do + if cmd ~= 'setup' and cmd ~= 'available_commands' and cmd ~= 'autosave_session' then + table.insert(commands, cmd) + end + end + vim.ui.select(commands, { + prompt = 'Session Manager', + format_item = function(item) return item:sub(1, 1):upper() .. item:sub(2):gsub('_', ' ') end, + }, function(item) + if item then + session_manager[item]() + end + end) +end + --- Selects a session a loads it. ---@param discard_current boolean: If `true`, do not check for unsaved buffers. function session_manager.load_session(discard_current) diff --git a/lua/session_manager/subcommands.lua b/lua/session_manager/subcommands.lua index 2faafe6..363565e 100644 --- a/lua/session_manager/subcommands.lua +++ b/lua/session_manager/subcommands.lua @@ -29,6 +29,10 @@ end --- Run specified subcommand received from completion. ---@param subcommand table function subcommands.run(subcommand) + if subcommand.args == '' then + session_manager.available_commands() + return + end local subcommand_func = session_manager[subcommand.fargs[1]] if not subcommand_func then utils.notify('No such subcommand: ' .. subcommand.fargs[1], vim.log.levels.ERROR) diff --git a/plugin/session_manager.lua b/plugin/session_manager.lua index 9582b32..bf973d7 100644 --- a/plugin/session_manager.lua +++ b/plugin/session_manager.lua @@ -6,7 +6,7 @@ end local subcommands = require('session_manager.subcommands') local session_manager = require('session_manager') -vim.api.nvim_create_user_command('SessionManager', subcommands.run, { nargs = 1, bang = true, complete = subcommands.complete, desc = 'Run session manager command' }) +vim.api.nvim_create_user_command('SessionManager', subcommands.run, { nargs = '*', bang = true, complete = subcommands.complete, desc = 'Run session manager command' }) local session_manager_group = vim.api.nvim_create_augroup('SessionManager', {}) vim.api.nvim_create_autocmd({ 'VimEnter' }, {