omit netrw from saved sessions

This commit is contained in:
Ray Elliott 2026-10-28 19:00:31 +00:00
commit bf39cd1ecd
4 changed files with 76 additions and 0 deletions

View file

@ -137,6 +137,78 @@ vim.api.nvim_create_autocmd("SessionLoadPost", {
end,
})
local function is_netrw_session_buffer(buf)
return vim.api.nvim_buf_is_valid(buf)
and (vim.bo[buf].filetype == "netrw" or vim.api.nvim_buf_get_name(buf):match("NetrwTreeListing$") ~= nil)
end
local function session_fallback_buffer()
for _, buf in ipairs(vim.api.nvim_list_bufs()) do
if
vim.api.nvim_buf_is_valid(buf)
and vim.bo[buf].buflisted
and vim.bo[buf].buftype == ""
and vim.api.nvim_buf_get_name(buf) ~= ""
and not is_netrw_session_buffer(buf)
then
return buf
end
end
return vim.api.nvim_create_buf(true, false)
end
local function close_session_tab(tab)
if vim.api.nvim_tabpage_close then
pcall(vim.api.nvim_tabpage_close, tab, true)
return
end
pcall(function()
vim.api.nvim_set_current_tabpage(tab)
vim.cmd("tabclose!")
end)
end
local function omit_netrw_from_session()
local tabs_with_netrw = {}
for _, tab in ipairs(vim.api.nvim_list_tabpages()) do
for _, win in ipairs(vim.api.nvim_tabpage_list_wins(tab)) do
if is_netrw_session_buffer(vim.api.nvim_win_get_buf(win)) then
tabs_with_netrw[tab] = true
break
end
end
end
for tab in pairs(tabs_with_netrw) do
if vim.api.nvim_tabpage_is_valid(tab) then
for _, win in ipairs(vim.api.nvim_tabpage_list_wins(tab)) do
if vim.api.nvim_win_is_valid(win) and vim.wo[win].previewwindow then
pcall(vim.api.nvim_win_close, win, true)
end
end
if vim.api.nvim_tabpage_is_valid(tab) then
for _, win in ipairs(vim.api.nvim_tabpage_list_wins(tab)) do
if
vim.api.nvim_win_is_valid(win)
and is_netrw_session_buffer(vim.api.nvim_win_get_buf(win))
then
if #vim.api.nvim_tabpage_list_wins(tab) > 1 then
pcall(vim.api.nvim_win_close, win, true)
elseif #vim.api.nvim_list_tabpages() > 1 then
close_session_tab(tab)
else
vim.api.nvim_win_set_buf(win, session_fallback_buffer())
end
end
end
end
end
end
end
-- Auto-save session on exit, but ONLY if Session.vim already exists
vim.api.nvim_create_autocmd("VimLeavePre", {
group = session_aug,
@ -144,6 +216,7 @@ vim.api.nvim_create_autocmd("VimLeavePre", {
callback = function()
-- Only save if Session.vim exists (user manually created it)
if vim.fn.filereadable("Session.vim") == 1 then
omit_netrw_from_session()
vim.cmd("mksession! Session.vim")
end
end,