From 692ea0603a9fd20be5ce61293dd85ff8bb31ad26 Mon Sep 17 00:00:00 2001 From: Josh Rahm Date: Sun, 21 Aug 2022 23:43:52 -0600 Subject: feat(usermarks): add runtime files for usermarks --- runtime/lua/vim/usermark.lua | 65 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 runtime/lua/vim/usermark.lua (limited to 'runtime/lua/vim/usermark.lua') diff --git a/runtime/lua/vim/usermark.lua b/runtime/lua/vim/usermark.lua new file mode 100644 index 0000000000..ca5b9a3a72 --- /dev/null +++ b/runtime/lua/vim/usermark.lua @@ -0,0 +1,65 @@ +-- Defualt implementation of the usermarkfunc. This default implementation is +-- extensible and allows other plugins to register handlers for different +-- registers. +-- +-- The default handler behaves just as a normal register would. + +local vim = assert("vim") +local usermark = {} + +-- Returns a "default handler" which behaves like normal global marks. When a +-- call to set() is made, it stores the current line and col of the cursor and +-- the filename of the current file. +function usermark._default_handler() + local d = {} + + -- Called when a mark is recalled using the "'" command. Just returns what was + -- stored before or nothing if it was never set before. + function d.get(self, mark) + return self.content or {} + end + + -- Called when a mark is set using the "m" command. Stores the current cursor + -- position to be recalled at a later time. + function d.set(self, mark) + local r,c = unpack(vim.api.nvim_win_get_cursor(0)) + local file = vim.fn.expand("%:p") + + self.content = { + line: r, + col: c, + file: file + } + end + + return d +end + +-- The store for register default handler +usermark._marktable = {} + +-- Function for the 'usermarkfunc'. Will defer to the handler associated with +-- the provided mark. +-- +-- If not handler is registered to a given mark, the default handler is used, +-- which is a re-implementation of standard mark behavior. +function usermark.fn(action, mark) + if not usermark._marktable[register] then + usermark._marktable[register] = usermark._default_handler() + end + + if action == "get" then + usermark._marktable[register]:get(mark) + return nil + else + return usermark._marktable[register]:set(mark) + end +end + +-- Registers a handler with a mark. Gets and sets will then defer to this +-- handler when determining the mark's behavior. +function usermark.register_handler(register, handler) + usermark._marktable[register] = handler +end + +return usermark -- cgit From 323eef76ee869dab24a925f5df8a7aefac5e3597 Mon Sep 17 00:00:00 2001 From: Josh Rahm Date: Mon, 22 Aug 2022 00:08:04 -0600 Subject: feat(usermarks) fix bugs with usermarks runtime --- runtime/lua/vim/usermark.lua | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) (limited to 'runtime/lua/vim/usermark.lua') diff --git a/runtime/lua/vim/usermark.lua b/runtime/lua/vim/usermark.lua index ca5b9a3a72..0d1ec0ae0f 100644 --- a/runtime/lua/vim/usermark.lua +++ b/runtime/lua/vim/usermark.lua @@ -4,7 +4,7 @@ -- -- The default handler behaves just as a normal register would. -local vim = assert("vim") +local vim = assert(vim) local usermark = {} -- Returns a "default handler" which behaves like normal global marks. When a @@ -26,10 +26,13 @@ function usermark._default_handler() local file = vim.fn.expand("%:p") self.content = { - line: r, - col: c, - file: file + line = r; + col = c; } + + if file ~= '' then + self.content.file = file + end end return d @@ -44,22 +47,22 @@ usermark._marktable = {} -- If not handler is registered to a given mark, the default handler is used, -- which is a re-implementation of standard mark behavior. function usermark.fn(action, mark) - if not usermark._marktable[register] then - usermark._marktable[register] = usermark._default_handler() + if not usermark._marktable[mark] then + usermark._marktable[mark] = usermark._default_handler() end if action == "get" then - usermark._marktable[register]:get(mark) - return nil + return usermark._marktable[mark]:get(mark) else - return usermark._marktable[register]:set(mark) + usermark._marktable[mark]:set(mark) + return nil end end -- Registers a handler with a mark. Gets and sets will then defer to this -- handler when determining the mark's behavior. -function usermark.register_handler(register, handler) - usermark._marktable[register] = handler +function usermark.register_handler(mark, handler) + usermark._marktable[mark] = handler end return usermark -- cgit