113 lines
2.5 KiB
Lua
113 lines
2.5 KiB
Lua
local globals = require("nvim-tree.globals")
|
|
|
|
local M = {}
|
|
|
|
--- Debugging only.
|
|
--- Tabs show WINID_PER_TAB winid and BUFNR_PER_TAB bufnr for the tab.
|
|
--- Orphans for inexistent tab_ids are shown at the right.
|
|
--- lib.target_winid is always shown at the right next to a close button.
|
|
--- Enable with:
|
|
--- vim.opt.tabline = "%!v:lua.require('nvim-tree.explorer.view').tab_line()"
|
|
--- vim.opt.showtabline = 2
|
|
---@return string
|
|
function M.tab_line()
|
|
local tab_ids = vim.api.nvim_list_tabpages()
|
|
local cur_tab_id = vim.api.nvim_get_current_tabpage()
|
|
|
|
local bufnr_per_tab = vim.deepcopy(globals.BUFNR_PER_TAB)
|
|
local tabpages = vim.deepcopy(globals.WINID_PER_TAB)
|
|
|
|
local tl = "%#TabLine#"
|
|
|
|
for i, tab_id in ipairs(tab_ids) do
|
|
-- click to select
|
|
tl = tl .. "%" .. i .. "T"
|
|
|
|
-- style
|
|
if tab_id == cur_tab_id then
|
|
tl = tl .. "%#StatusLine#|"
|
|
else
|
|
tl = tl .. "|%#TabLine#"
|
|
end
|
|
|
|
-- tab_id itself
|
|
tl = tl .. " t" .. tab_id
|
|
|
|
-- winid, if present
|
|
local tp = globals.WINID_PER_TAB[tab_id]
|
|
if tp then
|
|
tl = tl .. " w" .. (tp or "nil")
|
|
else
|
|
tl = tl .. " "
|
|
end
|
|
|
|
-- bufnr, if present
|
|
local bpt = globals.BUFNR_PER_TAB[tab_id]
|
|
if bpt then
|
|
tl = tl .. " b" .. bpt
|
|
else
|
|
tl = tl .. " "
|
|
end
|
|
|
|
tl = tl .. " "
|
|
|
|
-- remove actively mapped
|
|
bufnr_per_tab[tab_id] = nil
|
|
tabpages[tab_id] = nil
|
|
end
|
|
|
|
-- close last and reset
|
|
tl = tl .. "|%#CursorLine#%T"
|
|
|
|
-- collect orphans
|
|
local orphans = {}
|
|
for tab_id, bufnr in pairs(bufnr_per_tab) do
|
|
orphans[tab_id] = orphans[tab_id] or {}
|
|
orphans[tab_id].bufnr = bufnr
|
|
end
|
|
for tab_id, tp in pairs(tabpages) do
|
|
orphans[tab_id] = orphans[tab_id] or {}
|
|
orphans[tab_id].winid = tp
|
|
end
|
|
|
|
-- right-align
|
|
tl = tl .. "%=%#TabLine#"
|
|
|
|
-- print orphans
|
|
for tab_id, orphan in pairs(orphans) do
|
|
-- inexistent tab
|
|
tl = tl .. "%#error#| t" .. tab_id
|
|
|
|
-- maybe winid
|
|
if orphan.winid then
|
|
tl = tl .. " w" .. (orphan.winid or "nil")
|
|
else
|
|
tl = tl .. " "
|
|
end
|
|
|
|
-- maybe bufnr
|
|
if orphan.bufnr then
|
|
tl = tl .. " b" .. orphan.bufnr
|
|
else
|
|
tl = tl .. " "
|
|
end
|
|
tl = tl .. " "
|
|
end
|
|
|
|
-- target win id and close button
|
|
tl = tl .. "|%#TabLine# twi" .. (require("nvim-tree.lib").target_winid or "?") .. " %999X| X |"
|
|
|
|
return tl
|
|
end
|
|
|
|
function M.setup(opts)
|
|
if not opts.experimental.multi_instance then
|
|
return
|
|
end
|
|
|
|
vim.opt.tabline = "%!v:lua.require('nvim-tree.multi-instance-debug').tab_line()"
|
|
vim.opt.showtabline = 2
|
|
end
|
|
|
|
return M
|