@@ -7,34 +7,63 @@ M.Numberings = {
7
7
BOTH = 3 ,
8
8
}
9
9
10
- local numberings = {}
10
+ local function get_buffer_numberings ()
11
+ local window_id = vim .api .nvim_get_current_win ()
12
+ local window_numberings = vim .w [window_id ].numberings
11
13
12
- local function get_current_window_key ()
13
- return tostring (vim .api .nvim_get_current_win ())
14
+ if window_numberings ~= nil then
15
+ return window_numberings
16
+ end
17
+
18
+ local buffer_id = vim .api .nvim_get_current_buf ()
19
+ local buffer_numberings = vim .b [buffer_id ].numberings
20
+ local found = nil
21
+
22
+ for i = 1 , # buffer_numberings do
23
+ if buffer_numberings [i ].number == vim .o .number and
24
+ buffer_numberings [i ].relativenumber == vim .o .relativenumber then
25
+ found = i
26
+ break
27
+ end
28
+ end
29
+ if # buffer_numberings > 1 and found > 1 then
30
+ return {
31
+ unpack (buffer_numberings , found , # buffer_numberings ),
32
+ unpack (buffer_numberings , 1 , found - 1 ),
33
+ }
34
+ else
35
+ return buffer_numberings
36
+ end
14
37
end
15
38
16
39
17
40
local function set_numbering ()
18
- local window_key = get_current_window_key ()
41
+ local window_id = vim . api . nvim_get_current_win ()
19
42
20
- vim .o .number = numberings [ window_key ] [1 ].number
21
- vim .o .relativenumber = numberings [ window_key ] [1 ].relativenumber
43
+ vim .o .number = vim . w [ window_id ]. numberings [1 ].number
44
+ vim .o .relativenumber = vim . w [ window_id ]. numberings [1 ].relativenumber
22
45
end
23
46
24
47
25
48
function M .next ()
26
- local window_key = get_current_window_key ()
27
- local first_item = table.remove (numberings [window_key ], 1 )
28
- table.insert (numberings [window_key ], first_item )
49
+ local window_id = vim .api .nvim_get_current_win ()
50
+ local numberings = get_buffer_numberings ()
51
+
52
+ local first_item = table.remove (numberings , 1 )
53
+ table.insert (numberings , first_item )
54
+ vim .w [window_id ].numberings = numberings
29
55
30
56
set_numbering ()
31
57
end
32
58
33
59
34
60
function M .prev ()
35
- local window_key = get_current_window_key ()
36
- local last_item = table.remove (numberings [window_key ])
37
- table.insert (numberings [window_key ], 1 , last_item )
61
+ local window_id = vim .api .nvim_get_current_win ()
62
+ local numberings = get_buffer_numberings ()
63
+
64
+ local last_item = table.remove (numberings )
65
+ table.insert (numberings , 1 , last_item )
66
+ vim .w [window_id ].numberings = numberings
38
67
39
68
set_numbering ()
40
69
end
60
89
function M .setup (raw_numberings )
61
90
if type (raw_numberings ) ~= ' table' then return end
62
91
63
- local window_key = get_current_window_key ()
64
- numberings [window_key ] = filter_numberings (raw_numberings )
92
+ local buffer_id = vim .api .nvim_get_current_buf ()
93
+ local window_id = vim .api .nvim_get_current_win ()
94
+
95
+ vim .b [buffer_id ].numberings = filter_numberings (raw_numberings )
96
+ vim .w [window_id ].numberings = vim .b [buffer_id ].numberings
65
97
66
98
set_numbering ()
67
99
end
0 commit comments