diff --git a/README.md b/README.md index 2a426ad..3fd1fb0 100644 --- a/README.md +++ b/README.md @@ -242,8 +242,7 @@ require("persisted").setup({ A *session* table is exposed to the callback functions and has the following properties: * name - The filename of the session. -* branch - The git branch of the session. -* pwd - The present working directory of the session; *and* +* branch - The git branch of the session; *and* * file_path - The file path to the session. ## :rocket: Usage diff --git a/lua/persisted/init.lua b/lua/persisted/init.lua index 633390a..49083be 100644 --- a/lua/persisted/init.lua +++ b/lua/persisted/init.lua @@ -46,7 +46,7 @@ end ---Get the session that was saved last ---@return string local function get_last() - local sessions = M.list() + local sessions = vim.fn.glob(config.options.dir .. "*.vim", true, true) table.sort(sessions, function(a, b) return vim.loop.fs_stat(a).mtime.sec > vim.loop.fs_stat(b).mtime.sec end) @@ -160,6 +160,18 @@ function M.delete() end end +---Determines whether to load, start or stop a session +---@return function +function M.toggle() + if vim.g.persisting == nil then + return M.load() + end + if vim.g.persisting then + return M.stop() + end + return M.start() +end + ---List all of the sessions in the session directory ---@return table function M.list() @@ -174,33 +186,14 @@ function M.list() :gsub(vim.fn.expand("~"), utils.get_dir_pattern()) :gsub("//", "") - local branch = utils.get_last_item(utils.split_str(session_name, "_")):gsub(".vim", "") - - local pwd = vim.fn.expand("~") .. utils.get_dir_pattern() .. session_name - local branch_name = "_" .. utils.get_last_item(utils.split_str(pwd, "_")) - pwd = pwd:gsub(branch_name, "") - table.insert(sessions, { - ["name"] = session_name, + ["name"] = utils.split_str(session_name, "_")[1], ["file_path"] = session, - ["branch"] = branch, - ["pwd"] = pwd, + ["branch"] = utils.split_str(session_name, "_")[2]:gsub(".vim", ""), }) end return sessions end ----Determines whether to load, start or stop a session ----@return function -function M.toggle() - if vim.g.persisting == nil then - return M.load() - end - if vim.g.persisting then - return M.stop() - end - return M.start() -end - return M diff --git a/lua/telescope/_extensions/persisted.lua b/lua/telescope/_extensions/persisted.lua index cde12f0..0ec8108 100644 --- a/lua/telescope/_extensions/persisted.lua +++ b/lua/telescope/_extensions/persisted.lua @@ -6,14 +6,28 @@ local entry_display = require("telescope.pickers.entry_display") local action_state = require("telescope.actions.state") local config = require("persisted.config").options -local sessions = require("persisted").list() local function search_sessions(opts) + -- Layout borrowed from: + ---https://github.com/LinArcX/telescope-env.nvim/blob/master/lua/telescope/_extensions/env.lua + local cols = vim.o.columns + local telescope_width = conf.width + or conf.layout_config.width + or conf.layout_config[conf.layout_strategy].width + or cols + + if telescope_width < 1 then + telescope_width = math.floor(cols * telescope_width) + end + + local branch_width = 30 + local name_width = math.floor(cols * 0.05) + local displayer = entry_display.create({ separator = " │ ", items = { - { width = 50 }, - { width = 10 }, + { width = telescope_width - branch_width - name_width }, + { width = branch_width }, { remaining = true }, }, }) @@ -31,7 +45,6 @@ local function search_sessions(opts) name = item.name, branch = item.branch, - pwd = item.pwd, file_path = item.file_path, } end @@ -40,7 +53,7 @@ local function search_sessions(opts) prompt_title = "Sessions", sorter = conf.generic_sorter(opts), finder = finders.new_table({ - results = sessions, + results = require("persisted").list(), entry_maker = make_entry, }), attach_mappings = function(prompt_bufnr)