Skip to content

Commit 4a7201c

Browse files
committed
Stores line numbering settings per window.
1 parent acb9129 commit 4a7201c

File tree

2 files changed

+47
-14
lines changed

2 files changed

+47
-14
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ Set the desired line numbering quickly, even if it differs by filetype.
77
- Fast switching among line numbering combinations at will via a hotkey.
88
- Freely combine absolute/relative line numbering options in ordered sets.
99
- Ability to use different line numbering sets per filetype.
10+
- Each window respects others' line numbering order for the same buffer too.
1011
- Can define a default line numbering set for unknown filetypes.
1112

1213
## ⚡ Requirements

lua/numberly.lua

+46-14
Original file line numberDiff line numberDiff line change
@@ -7,34 +7,63 @@ M.Numberings = {
77
BOTH = 3,
88
}
99

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
1113

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
1437
end
1538

1639

1740
local function set_numbering()
18-
local window_key = get_current_window_key()
41+
local window_id = vim.api.nvim_get_current_win()
1942

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
2245
end
2346

2447

2548
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
2955

3056
set_numbering()
3157
end
3258

3359

3460
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
3867

3968
set_numbering()
4069
end
@@ -60,8 +89,11 @@ end
6089
function M.setup(raw_numberings)
6190
if type(raw_numberings) ~= 'table' then return end
6291

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
6597

6698
set_numbering()
6799
end

0 commit comments

Comments
 (0)