omit netrw from saved sessions
This commit is contained in:
parent
4a721f051e
commit
bf39cd1ecd
4 changed files with 76 additions and 0 deletions
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue