summaryrefslogtreecommitdiff
path: root/plugin/mark.lua
diff options
context:
space:
mode:
Diffstat (limited to 'plugin/mark.lua')
-rw-r--r--plugin/mark.lua29
1 files changed, 25 insertions, 4 deletions
diff --git a/plugin/mark.lua b/plugin/mark.lua
index dd3baa6..ccc6374 100644
--- a/plugin/mark.lua
+++ b/plugin/mark.lua
@@ -25,11 +25,10 @@ function middle_mark.set(self)
api.nvim_command('norm z.')
end
--- The top mark is the first line on the window. Right now scrolloff is ignored,
--- but maybe it shouldn't be.
+-- The top mark is the first line on the window. This does respect scrolloff.
local top_mark = {}
function top_mark.get(self)
- return vim.api.nvim_call_function('line', {'w0'})
+ return vim.api.nvim_call_function('line', {'w0'}) + vim.o.scrolloff
end
-- Setting the top mark move the current line to the top. Principally this is
-- the same mas z<cr>
@@ -41,14 +40,36 @@ end
-- this is the same as z-
local bottom_mark = {}
function bottom_mark.get(self)
- return vim.api.nvim_call_function('line', {'w$'})
+ return vim.api.nvim_call_function('line', {'w$'}) - vim.o.scrolloff
end
-- Setting the bottom mark doesn't do anything.
function bottom_mark.set(self)
api.nvim_command('norm z-')
end
+-- Mark that's like the expression register, but for a mark.
+local expr_mark = {}
+function expr_mark.get(self)
+ local mode = vim.api.nvim_call_function('mode', {})
+
+ if mode == "c" then
+ -- Avoid recurring asking for a value while in command mode.
+ return nil
+ end
+
+ local expr = vim.api.nvim_call_function('input', {'='})
+ if expr ~= "" then
+ return vim.api.nvim_eval(expr)
+ end
+
+ return nil
+end
+
+-- Setting the expr_mark does'nt do anything
+function expr_mark.set(self) end
+
-- Register all the marks with their respective characters.
usermark.register_handler('-', middle_mark)
usermark.register_handler('+', top_mark)
usermark.register_handler('_', bottom_mark)
+usermark.register_handler('=', expr_mark)