local action_state = require("telescope.actions.state") local actions = require("telescope.actions") local pickers = require("telescope.pickers") local sorters = require("telescope.sorters") local themes = require("telescope.themes") local utils = require("telescope._extensions.resession.utils") local M = {} -- Rename the selected session --- @param prompt_bufnr number function M.rename_session(prompt_bufnr) local opts = require("telescope._extensions.resession.config").opts local session = action_state.get_selected_entry()[1] local old_filename = utils.encode_session(session, opts) .. ".json" old_filename = utils.full_filename(old_filename) local new_filename = "" vim.ui.input({ prompt = "Rename Session", default = session, }, function(input) if input == "" or input == nil then return end new_filename = utils.encode_session(input, opts) .. ".json" new_filename = utils.full_filename(new_filename) vim.notify("old: " .. vim.inspect(old_filename) .. " new: " .. vim.inspect(new_filename)) local ok, err, _ = vim.uv.fs_rename(old_filename, new_filename) vim.notify(vim.inspect(err)) -- Refresh the picker actions.close(prompt_bufnr) M.resession_picker() end) end -- Delete the selected session ---@param prompt_bufnr number function M.delete_session(prompt_bufnr) local opts = require("telescope._extensions.resession.config").opts local session = action_state.get_selected_entry() local encoded = utils.encode_session(session[1], opts) require("resession").delete(encoded, { dir = opts.dir }) -- Refresh the picker actions.close(prompt_bufnr) M.resession_picker() end --- Load the selected session ---@param prompt_bufnr number function M.load_session(prompt_bufnr) local opts = require("telescope._extensions.resession.config").opts local session = action_state.get_selected_entry() local encoded = utils.encode_session(session[1], opts) actions.close(prompt_bufnr) require("resession").load(encoded, { dir = opts.dir }) end --- Render the session picker function M.resession_picker() local opts = require("telescope._extensions.resession.config").opts local dropdown = themes.get_dropdown({}) local resession_opts = { prompt_title = opts.prompt_title, finder = require("telescope.finders").new_table({ results = utils.get_results(opts), }), attach_mappings = function(_, map) map("i", "", M.load_session) map("n", "", M.load_session) map("i", "", M.delete_session) map("n", "", M.delete_session) map("i", "", M.rename_session) map("n", "", M.rename_session) return true end, sorter = sorters.get_fzy_sorter(), } return pickers.new(dropdown, resession_opts):find() end return M