@@ -6,6 +6,102 @@ local BUFNR_PER_TAB = {}
6
6
local CURSORS = {}
7
7
local TABPAGES = {}
8
8
9
+ --- Debugging only.
10
+ --- Tabs show TABPAGES winnr and BUFNR_PER_TAB bufnr for the tab.
11
+ --- Orphans for inexistent tab_ids are shown at the right.
12
+ --- Enable with:
13
+ --- vim.opt.tabline = "%!v:lua.require('nvim-tree.view').tab_line()"
14
+ --- vim.opt.showtabline = 2
15
+ function M .tab_line ()
16
+ local tab_ids = vim .api .nvim_list_tabpages ()
17
+ local cur_tab_id = vim .api .nvim_get_current_tabpage ()
18
+
19
+ local bufnr_per_tab = vim .deepcopy (BUFNR_PER_TAB )
20
+ local tabpages = vim .deepcopy (TABPAGES )
21
+
22
+ local tl = " %#TabLine#"
23
+
24
+ for i , tab_id in ipairs (tab_ids ) do
25
+ -- click to select
26
+ tl = tl .. " %" .. i .. " T"
27
+
28
+ -- style
29
+ if tab_id == cur_tab_id then
30
+ tl = tl .. " %#StatusLine#|"
31
+ else
32
+ tl = tl .. " |%#TabLine#"
33
+ end
34
+
35
+ -- tab_id itself
36
+ tl = tl .. " t" .. tab_id
37
+
38
+ -- winnr, if present
39
+ local tp = TABPAGES [tab_id ]
40
+ if tp then
41
+ tl = tl .. " w" .. tp .winnr
42
+ else
43
+ tl = tl .. " "
44
+ end
45
+
46
+ -- bufnr, if present
47
+ local bpt = BUFNR_PER_TAB [tab_id ]
48
+ if bpt then
49
+ tl = tl .. " b" .. bpt
50
+ else
51
+ tl = tl .. " "
52
+ end
53
+
54
+ tl = tl .. " "
55
+
56
+ -- remove actively mapped
57
+ bufnr_per_tab [tab_id ] = nil
58
+ tabpages [tab_id ] = nil
59
+ end
60
+
61
+ -- close last and reset
62
+ tl = tl .. " |%#CursorLine#%T"
63
+
64
+ -- collect orphans
65
+ local orphans = {}
66
+ for tab_id , bufnr in pairs (bufnr_per_tab ) do
67
+ orphans [tab_id ] = orphans [tab_id ] or {}
68
+ orphans [tab_id ].bufnr = bufnr
69
+ end
70
+ for tab_id , tp in pairs (tabpages ) do
71
+ orphans [tab_id ] = orphans [tab_id ] or {}
72
+ orphans [tab_id ].winnr = tp .winnr
73
+ end
74
+
75
+ -- right-align
76
+ tl = tl .. " %=%#TabLine#"
77
+
78
+ -- print orphans
79
+ for tab_id , orphan in pairs (orphans ) do
80
+ -- inexistent tab
81
+ tl = tl .. " %#error#| t" .. tab_id
82
+
83
+ -- maybe winnr
84
+ if orphan .winnr then
85
+ tl = tl .. " w" .. orphan .winnr
86
+ else
87
+ tl = tl .. " "
88
+ end
89
+
90
+ -- maybe bufnr
91
+ if orphan .bufnr then
92
+ tl = tl .. " b" .. orphan .bufnr
93
+ else
94
+ tl = tl .. " "
95
+ end
96
+ tl = tl .. " "
97
+ end
98
+
99
+ -- close button
100
+ tl = tl .. " |%#TabLine#%999X X |"
101
+
102
+ return tl
103
+ end
104
+
9
105
-- The initial state of a tab
10
106
local tabinitial = {
11
107
-- The position of the cursor { line, column }
0 commit comments