blob: dd3baa694682135870a7e1b59aa342314095b214 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
-- Implementation of middle mark. This mark is always in the middle of the
-- viewport.
local api = vim.api
-- Compatibility check.
if not api.nvim_call_function('has', {'usermarks'}) then
return nil
end
local usermark = require("vim.usermark")
-- The middle mark is on the middle of the screen.
local middle_mark = {}
function middle_mark.get(self)
local topline = vim.api.nvim_call_function('line', {'w0'})
local bottomline = vim.api.nvim_call_function('line', {'w$'})
return math.floor((topline + bottomline) / 2)
end
-- Setting the middle mark sets the current cusor line to the middle of the
-- window. Principally this is the same as z.
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.
local top_mark = {}
function top_mark.get(self)
return vim.api.nvim_call_function('line', {'w0'})
end
-- Setting the top mark move the current line to the top. Principally this is
-- the same mas z<cr>
function top_mark.set(self)
api.nvim_command('norm z<cr>')
end
-- Setting the bottom mark moves the current line to the bottom. Principally
-- this is the same as z-
local bottom_mark = {}
function bottom_mark.get(self)
return vim.api.nvim_call_function('line', {'w$'})
end
-- Setting the bottom mark doesn't do anything.
function bottom_mark.set(self)
api.nvim_command('norm z-')
end
-- Register all the marks with their respective characters.
usermark.register_handler('-', middle_mark)
usermark.register_handler('+', top_mark)
usermark.register_handler('_', bottom_mark)
|