45 lines
1.3 KiB
Lua
45 lines
1.3 KiB
Lua
local M = {}
|
|
|
|
M.on_save = function()
|
|
-- initiate astronvim data
|
|
local data = { bufnrs = {}, tabs = {} }
|
|
|
|
local buf_utils = require "astronvim.utils.buffer"
|
|
|
|
data.current_buf = buf_utils.current_buf
|
|
data.last_buf = buf_utils.last_buf
|
|
|
|
-- save tab scoped buffers and buffer numbers from buffer name
|
|
for new_tabpage, tabpage in ipairs(vim.api.nvim_list_tabpages()) do
|
|
data.tabs[new_tabpage] = vim.t[tabpage].bufs
|
|
for _, bufnr in ipairs(data.tabs[new_tabpage]) do
|
|
data.bufnrs[vim.api.nvim_buf_get_name(bufnr)] = bufnr
|
|
end
|
|
end
|
|
|
|
return data
|
|
end
|
|
|
|
M.on_load = function(data)
|
|
-- create map from old buffer numbers to new buffer numbers
|
|
local new_bufnrs = {}
|
|
for _, bufnr in ipairs(vim.api.nvim_list_bufs()) do
|
|
local bufname = vim.api.nvim_buf_get_name(bufnr)
|
|
if bufname and data.bufnrs[bufname] then new_bufnrs[data.bufnrs[bufname]] = bufnr end
|
|
end
|
|
-- build new tab scoped buffer lists
|
|
for tabpage, tabs in pairs(data.tabs) do
|
|
vim.t[tabpage].bufs = vim.tbl_map(function(bufnr) return new_bufnrs[bufnr] end, tabs)
|
|
end
|
|
|
|
local buf_utils = require "astronvim.utils.buffer"
|
|
buf_utils.current_buf = new_bufnrs[data.current_buf]
|
|
buf_utils.last_buf = new_bufnrs[data.last_buf]
|
|
|
|
require("astronvim.utils").event "BufsUpdated"
|
|
|
|
if vim.fn.bufnr() ~= buf_utils.current_buf then vim.cmd.b(buf_utils.current_buf) end
|
|
end
|
|
|
|
return M
|