Skip to content

Commit

Permalink
feat: display more information when selecting a session to load
Browse files Browse the repository at this point in the history
  • Loading branch information
stevearc-stripe committed Sep 26, 2022
1 parent 9b0e530 commit 8abb1b9
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 7 deletions.
3 changes: 3 additions & 0 deletions lua/resession/config.lua
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@ local default_config = {
end,
-- The name of the directory to store sessions in
dir = "session",
-- Show more detail about the sessions when selecting one to load.
-- Disable if it causes lag.
load_detail = true,
-- Configuration for extensions
extensions = {
quickfix = {},
Expand Down
36 changes: 29 additions & 7 deletions lua/resession/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ M.delete = function(name, opts)
vim.notify("No saved sessions", vim.log.levels.WARN)
return
end
vim.ui.select(sessions, {}, function(selected)
vim.ui.select(sessions, { prompt = "Delete session" }, function(selected)
if selected then
M.delete(selected)
end
Expand Down Expand Up @@ -325,7 +325,29 @@ M.load = function(name, opts)
vim.notify("No saved sessions", vim.log.levels.WARN)
return
end
vim.ui.select(sessions, {}, function(selected)
local select_opts = { prompt = "Load session" }
if config.load_detail then
local session_data = {}
for _, name in ipairs(sessions) do
local filename = util.get_session_file(name, opts.dir)
local data = files.load_json_file(filename)
session_data[name] = data
end
select_opts.format_item = function(name)
local data = session_data[name]
local formatted = name
if data then
if data.tab_scoped then
local tab_cwd = data.tabs[1].cwd
formatted = formatted .. string.format(" (tab) [%s]", util.shorten_path(tab_cwd))
else
formatted = formatted .. string.format(" [%s]", util.shorten_path(data.global.cwd))
end
end
return formatted
end
end
vim.ui.select(sessions, select_opts, function(selected)
if selected then
M.load(selected, opts)
end
Expand All @@ -348,15 +370,15 @@ M.load = function(name, opts)
else
open_clean_tab()
end
-- Set the options immediately
util.restore_global_options(data.global.options)
if not data.tab_scoped then
-- Set the options immediately
util.restore_global_options(data.global.options)
vim.cmd(string.format("cd %s", data.global.cwd))
end
local scale = {
vim.o.columns / data.global.width,
(vim.o.lines - vim.o.cmdheight) / data.global.height,
}
if not data.tab_scoped then
vim.cmd(string.format("cd %s", data.global.cwd))
end
for _, buf in ipairs(data.buffers) do
local bufnr = vim.fn.bufadd(buf.name)
if buf.loaded then
Expand Down
10 changes: 10 additions & 0 deletions lua/resession/util.lua
Original file line number Diff line number Diff line change
Expand Up @@ -108,4 +108,14 @@ M.include_buf = function(tabpage, bufnr, tabpage_bufs)
return tabpage_bufs[bufnr] or config.tab_buf_filter(tabpage, bufnr)
end

M.shorten_path = function(path)
local home = os.getenv("HOME")
local idx, chars = string.find(path, home)
if idx == 1 then
return "~" .. string.sub(path, idx + chars)
else
return path
end
end

return M

0 comments on commit 8abb1b9

Please sign in to comment.