refactor(#2826): add View.tab_line for debugging
This commit is contained in:
parent
ca3a817676
commit
5db04afa0a
@ -39,6 +39,7 @@ M.View = {
|
||||
---@field private width (fun():integer)|integer|string
|
||||
---@field private max_width integer
|
||||
---@field private padding integer
|
||||
---@field tab_line fun():string
|
||||
local View = Class:extend()
|
||||
|
||||
---@class View
|
||||
@ -664,4 +665,102 @@ function View:configure_width(width)
|
||||
end
|
||||
end
|
||||
|
||||
--- Debugging only.
|
||||
--- Tabs show TABPAGES winnr 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 View.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(BUFNR_PER_TAB)
|
||||
local tabpages = vim.deepcopy(M.View.tabpages)
|
||||
|
||||
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
|
||||
|
||||
-- winnr, if present
|
||||
local tp = M.View.tabpages[tab_id]
|
||||
if tp then
|
||||
tl = tl .. " w" .. tp.winnr
|
||||
else
|
||||
tl = tl .. " "
|
||||
end
|
||||
|
||||
-- bufnr, if present
|
||||
local bpt = 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].winnr = tp.winnr
|
||||
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 winnr
|
||||
if orphan.winnr then
|
||||
tl = tl .. " w" .. orphan.winnr
|
||||
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
|
||||
|
||||
return View
|
||||
|
||||
Loading…
Reference in New Issue
Block a user