1
0

Save bookmarks in session

This commit is contained in:
Stefan Rakel
2025-12-18 08:22:06 +01:00
parent 9c09a0ffcd
commit 63cf649210

View File

@@ -1,12 +1,12 @@
local Bookmarks = {}
local H = {
bookmarks = {},
bookmarksFilePath = ".bookmarks",
}
function Bookmarks.setup()
_G.Bookmarks = Bookmarks
--Ensure our data is saved in the session
vim.opt.sessionoptions:append("globals")
-- Attach to mini.sessions
@@ -30,70 +30,21 @@ function Bookmarks.setup()
local augroup = vim.api.nvim_create_augroup("bookmark.nvim", {clear=true})
vim.api.nvim_create_autocmd(
{"DirChanged"},
{
pattern = {"global"},
callback = H.loadBookmarks,
group = augroup,
}
)
vim.api.nvim_create_autocmd(
{"DirChangedPre"},
{
pattern = {"global"},
callback = H.saveBookmarks,
group = augroup,
}
)
vim.api.nvim_create_autocmd(
{"SessionWritePost"},
{
callback = H.saveBookmarks,
group = augroup,
}
)
vim.api.nvim_create_autocmd(
{"VimLeavePre"},
{"SessionLoadPost"},
{
pattern = {"*"},
callback = H.saveBookmarks,
callback = H.loadBookmarks,
group = augroup,
}
)
end
function H.loadBookmarks()
--clear current bookmarks
H.bookmarks = {}
H.bookmarksFilePath = ".bookmarks"
local path = vim.fs.find(".bookmarks", {upward = true, type="file"})[1]
if not path then
return
end
H.bookmarksFilePath = path
local file = io.open(H.bookmarksFilePath, "r")
if file then
local fileContent = file:read("*a")
file:close()
if fileContent and fileContent ~= "" then
H.bookmarks = vim.json.decode(fileContent)
end
else
vim.notify("Failed to load Bookmarks")
end
H.bookmarks = vim.json.decode(vim.g.Bookmarks)
end
function H.saveBookmarks()
if #H.bookmarks > 0 or vim.fn.filereadable(H.bookmarksFilePath) == 1 then
local file = io.open(H.bookmarksFilePath, "w")
if file then
file:write(vim.json.encode(H.bookmarks))
file:flush()
file:close()
else
vim.notify("Failed to save Bookmarks")
end
end
vim.g.Bookmarks = vim.json.encode(H.bookmarks)
end
function Bookmarks.addBookmark()
@@ -102,6 +53,7 @@ function Bookmarks.addBookmark()
local file = vim.api.nvim_buf_get_name(0)
local cursor = vim.api.nvim_win_get_cursor(0)
table.insert(H.bookmarks, {name = input, file = file, cursor = cursor})
H.saveBookmarks()
vim.notify("Bookmark \"" .. input .. "\" added")
end
end)
@@ -119,6 +71,7 @@ function Bookmarks.deleteBookmark()
Bookmarks.selectBookmark("Delete", function(bookmark, idx)
if idx then
table.remove(H.bookmarks, idx)
H.saveBookmark()
vim.notify("Deleted bookmark \"".. bookmark.name .. "\"")
end
end)
@@ -158,9 +111,11 @@ function Bookmarks.loadTabNames()
if tabnames then
tabnames = vim.json.decode(tabnames)
for k,v in pairs(tabnames) do
if vim.t[k] then
vim.t[k].bookmark_tabname = v
end
end
end
end
return Bookmarks