Compare commits
3 Commits
7514fa653f
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
699f021c43 | ||
|
|
7ec4a474d7 | ||
|
|
b97e491437 |
102
lua/bookmark.lua
102
lua/bookmark.lua
@@ -1,50 +1,56 @@
|
|||||||
local Bookmarks = {}
|
local Bookmarks = {}
|
||||||
local H = {
|
local H = {
|
||||||
|
state = {
|
||||||
bookmarks = {},
|
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")
|
|
||||||
|
|
||||||
-- Attach to mini.sessions
|
|
||||||
if MiniSessions then
|
|
||||||
local oldWriteFunction = MiniSessions.config.hooks.pre.write
|
|
||||||
MiniSessions.config.hooks.pre.write = function(data)
|
|
||||||
if oldWriteFunction then
|
|
||||||
oldWriteFunction(data)
|
|
||||||
end
|
|
||||||
Bookmarks.updateTabNames()
|
|
||||||
end
|
|
||||||
|
|
||||||
local oldReadFunction = MiniSessions.config.hooks.post.read
|
|
||||||
MiniSessions.config.hooks.post.read = function(data)
|
|
||||||
if oldReadFunction then
|
|
||||||
oldReadFunction(data)
|
|
||||||
end
|
|
||||||
Bookmarks.loadTabNames()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
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(
|
||||||
{"SessionLoadPost"},
|
{"DirChanged"},
|
||||||
{
|
{
|
||||||
pattern = {"*"},
|
pattern = {"*"},
|
||||||
callback = H.loadBookmarks,
|
callback = function()
|
||||||
|
H.loadBookmarks()
|
||||||
|
end,
|
||||||
group = augroup,
|
group = augroup,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function H.getSavePath()
|
||||||
|
local cwd = vim.fs.normalize(vim.fn.getcwd())
|
||||||
|
local filename = string.gsub(cwd, "[/:]", "%%")
|
||||||
|
local statePath = vim.fs.normalize(vim.fn.stdpath("state"))
|
||||||
|
statePath = vim.fs.joinpath(statePath, "bookmark")
|
||||||
|
vim.fn.mkdir(statePath, "p")
|
||||||
|
local filePath = vim.fs.joinpath(statePath, filename)
|
||||||
|
return filePath
|
||||||
|
end
|
||||||
|
|
||||||
function H.loadBookmarks()
|
function H.loadBookmarks()
|
||||||
H.bookmarks = vim.json.decode(vim.g.Bookmarks)
|
H.state = {bookmarks = {}}
|
||||||
|
local path = H.getSavePath()
|
||||||
|
local file = io.open(path, "r")
|
||||||
|
if not file then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local content = file:read("*a")
|
||||||
|
file:close()
|
||||||
|
H.state = vim.json.decode(content)
|
||||||
end
|
end
|
||||||
|
|
||||||
function H.saveBookmarks()
|
function H.saveBookmarks()
|
||||||
vim.g.Bookmarks = vim.json.encode(H.bookmarks)
|
local path = H.getSavePath()
|
||||||
|
local file = io.open(path, "w")
|
||||||
|
if not file then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
file:write(vim.json.encode(H.state))
|
||||||
|
file:close()
|
||||||
end
|
end
|
||||||
|
|
||||||
function Bookmarks.addBookmark()
|
function Bookmarks.addBookmark()
|
||||||
@@ -52,7 +58,7 @@ function Bookmarks.addBookmark()
|
|||||||
if input and input ~= "" then
|
if input and input ~= "" then
|
||||||
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.state.bookmarks, {name = input, file = file, cursor = cursor})
|
||||||
H.saveBookmarks()
|
H.saveBookmarks()
|
||||||
vim.notify("Bookmark \"" .. input .. "\" added")
|
vim.notify("Bookmark \"" .. input .. "\" added")
|
||||||
end
|
end
|
||||||
@@ -60,8 +66,8 @@ function Bookmarks.addBookmark()
|
|||||||
end
|
end
|
||||||
|
|
||||||
function Bookmarks.selectBookmark(action, on_choice)
|
function Bookmarks.selectBookmark(action, on_choice)
|
||||||
if H.bookmarks and #H.bookmarks > 0 then
|
if H.state.bookmarks and #H.state.bookmarks > 0 then
|
||||||
vim.ui.select(H.bookmarks, {prompt = action .." Bookmark", format_item = function(item) return item.name end}, on_choice)
|
vim.ui.select(H.state.bookmarks, {prompt = action .." Bookmark", format_item = function(item) return item.name end}, on_choice)
|
||||||
else
|
else
|
||||||
vim.notify("No bookmarks set or loaded")
|
vim.notify("No bookmarks set or loaded")
|
||||||
end
|
end
|
||||||
@@ -70,8 +76,8 @@ end
|
|||||||
function Bookmarks.deleteBookmark()
|
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.state.bookmarks, idx)
|
||||||
H.saveBookmark()
|
H.saveBookmarks()
|
||||||
vim.notify("Deleted bookmark \"".. bookmark.name .. "\"")
|
vim.notify("Deleted bookmark \"".. bookmark.name .. "\"")
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
@@ -88,38 +94,4 @@ function Bookmarks.jumpToBookmark()
|
|||||||
end))
|
end))
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Tab naming
|
|
||||||
function Bookmarks.nameTab()
|
|
||||||
vim.ui.input({prompt = "Name this tab", default = vim.t.bookmark_tabname}, function(input)
|
|
||||||
if input and input ~= "" then
|
|
||||||
vim.t.bookmark_tabname = input
|
|
||||||
vim.cmd.redrawtabline()
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
|
|
||||||
function Bookmarks.updateTabNames()
|
|
||||||
local names = {}
|
|
||||||
for i, tabid in ipairs(vim.api.nvim_list_tabpages()) do
|
|
||||||
names[i] = vim.t[tabid].bookmark_tabname
|
|
||||||
end
|
|
||||||
vim.g.Bookmark_tabnames = vim.json.encode(names)
|
|
||||||
end
|
|
||||||
|
|
||||||
function Bookmarks.loadTabNames()
|
|
||||||
local tabnames = vim.g.Bookmark_tabnames
|
|
||||||
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
|
|
||||||
|
|
||||||
function Bookmarks.showTabName()
|
|
||||||
vim.notify("Tabname: " .. vim.t.bookmark_tabname)
|
|
||||||
end
|
|
||||||
|
|
||||||
return Bookmarks
|
return Bookmarks
|
||||||
|
|||||||
Reference in New Issue
Block a user