From 33f26a553ecfbe176fcb58b94e6fb801ff58c75a Mon Sep 17 00:00:00 2001 From: Scott McKendry <39483124+scottmckendry@users.noreply.github.com> Date: Fri, 21 Jun 2024 14:41:37 +1200 Subject: [PATCH] feat: resession extension mvp :sparkles: --- lua/telescope/_extensions/resession.lua | 62 +++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 lua/telescope/_extensions/resession.lua diff --git a/lua/telescope/_extensions/resession.lua b/lua/telescope/_extensions/resession.lua new file mode 100644 index 0000000..c5d6bd1 --- /dev/null +++ b/lua/telescope/_extensions/resession.lua @@ -0,0 +1,62 @@ +local actions = require("telescope.actions") +local action_state = require("telescope.actions.state") +local telescope = require("telescope") +local themes = require("telescope.themes") +local sorters = require("telescope.sorters") +local pickers = require("telescope.pickers") + +local ok, _ = pcall(require, "telescope") +if not ok then + error("This plugin requires telescope.nvim") +end + +ok, _ = pcall(require, "resession") +if not ok then + error("This plugin requires resession.nvim") +end + +local function encode_session(session_str) + return session_str:gsub(":\\", "__"):gsub("\\", "_") +end + +local function decode_sessions(sessions) + for i, session in ipairs(sessions) do + sessions[i] = session:gsub("__", ":\\"):gsub("_", "\\") + end + return sessions +end + +local function get_sessions() + local sessions = require("resession").list({ dir = "dirsession" }) + return sessions +end + +local function load_session(prompt_bufnr) + local session = action_state.get_selected_entry() + local encoded = encode_session(session[1]) + actions.close(prompt_bufnr) + require("resession").load(encoded, { dir = "dirsession" }) +end + +local dropdown = themes.get_dropdown({}) + +local resession_opts = { + prompt_title = "Find session", + finder = require("telescope.finders").new_table({ + results = decode_sessions(get_sessions()), + }), + + attach_mappings = function(_, map) + map("i", "", load_session) + map("n", "", load_session) + return true + end, + + sorter = sorters.get_generic_fuzzy_sorter(), +} + +local function resession_picker() + pickers.new(dropdown, resession_opts):find() +end + +return telescope.register_extension({ exports = { resession = resession_picker } })