1
0

Compare commits

..

2 Commits

Author SHA1 Message Date
Stefan Rakel
7514fa653f Add function to show tabname 2025-12-18 08:25:18 +01:00
Stefan Rakel
63cf649210 Save bookmarks in session 2025-12-18 08:22:06 +01:00

View File

@@ -1,12 +1,12 @@
local Bookmarks = {} local Bookmarks = {}
local H = { local H = {
bookmarks = {}, bookmarks = {},
bookmarksFilePath = ".bookmarks",
} }
function Bookmarks.setup() function Bookmarks.setup()
_G.Bookmarks = Bookmarks _G.Bookmarks = Bookmarks
--Ensure our data is saved in the session
vim.opt.sessionoptions:append("globals") vim.opt.sessionoptions:append("globals")
-- Attach to mini.sessions -- Attach to mini.sessions
@@ -30,70 +30,21 @@ function Bookmarks.setup()
local augroup = vim.api.nvim_create_augroup("bookmark.nvim", {clear=true}) local augroup = vim.api.nvim_create_augroup("bookmark.nvim", {clear=true})
vim.api.nvim_create_autocmd( vim.api.nvim_create_autocmd(
{"DirChanged"}, {"SessionLoadPost"},
{
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"},
{ {
pattern = {"*"}, pattern = {"*"},
callback = H.saveBookmarks, callback = H.loadBookmarks,
group = augroup, group = augroup,
} }
) )
end end
function H.loadBookmarks() function H.loadBookmarks()
--clear current bookmarks H.bookmarks = vim.json.decode(vim.g.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
end end
function H.saveBookmarks() function H.saveBookmarks()
if #H.bookmarks > 0 or vim.fn.filereadable(H.bookmarksFilePath) == 1 then vim.g.Bookmarks = vim.json.encode(H.bookmarks)
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
end end
function Bookmarks.addBookmark() function Bookmarks.addBookmark()
@@ -102,6 +53,7 @@ function Bookmarks.addBookmark()
local file = vim.api.nvim_buf_get_name(0) local file = vim.api.nvim_buf_get_name(0)
local cursor = vim.api.nvim_win_get_cursor(0) local cursor = vim.api.nvim_win_get_cursor(0)
table.insert(H.bookmarks, {name = input, file = file, cursor = cursor}) table.insert(H.bookmarks, {name = input, file = file, cursor = cursor})
H.saveBookmarks()
vim.notify("Bookmark \"" .. input .. "\" added") vim.notify("Bookmark \"" .. input .. "\" added")
end end
end) end)
@@ -119,6 +71,7 @@ function Bookmarks.deleteBookmark()
Bookmarks.selectBookmark("Delete", function(bookmark, idx) Bookmarks.selectBookmark("Delete", function(bookmark, idx)
if idx then if idx then
table.remove(H.bookmarks, idx) table.remove(H.bookmarks, idx)
H.saveBookmark()
vim.notify("Deleted bookmark \"".. bookmark.name .. "\"") vim.notify("Deleted bookmark \"".. bookmark.name .. "\"")
end end
end) end)
@@ -158,9 +111,15 @@ function Bookmarks.loadTabNames()
if tabnames then if tabnames then
tabnames = vim.json.decode(tabnames) tabnames = vim.json.decode(tabnames)
for k,v in pairs(tabnames) do for k,v in pairs(tabnames) do
if vim.t[k] then
vim.t[k].bookmark_tabname = v vim.t[k].bookmark_tabname = v
end end
end end
end
end
function Bookmarks.showTabName()
vim.notify("Tabname: " .. vim.t.bookmark_tabname)
end end
return Bookmarks return Bookmarks