You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

116 lines
3.0 KiB

local theme = {
fill = "TabLineFill",
head = "TabLine",
current_tab = "TabLineSel",
tab = "TabLine",
win = "TabLine",
tail = "TabLine",
}
local open_tabs = {}
local tab_name = function(tab)
local api = require "tabby.module.api"
local cur_win = api.get_tab_current_win(tab.id)
if api.is_float_win(cur_win) then
return "[Floating]"
end
local current_bufnr = vim.fn.getwininfo(cur_win)[1].bufnr
local current_bufinfo = vim.fn.getbufinfo(current_bufnr)[1]
local current_buf_name = vim.fn.fnamemodify(current_bufinfo.name, ":t")
-- local no_extension = vim.fn.fnamemodify(current_bufinfo.name, ":p:r")
if string.find(current_buf_name, "NvimTree") ~= nil then
return "[File Explorer]"
end
if current_buf_name == "NeogitStatus" then
return "[Neogit]"
end
if open_tabs[current_bufinfo.name] == nil then
local project_name = vim.fn.fnamemodify(vim.fn.getcwd(), ":p:h:t")
open_tabs[current_bufinfo.name] = project_name
end
if current_buf_name == "" then
return "[Empty]"
else
if open_tabs[current_bufinfo.name] == nil then
return current_buf_name
end
return open_tabs[current_bufinfo.name] .. ":" .. current_buf_name
end
end
local tab_count = function()
local num_tabs = #vim.api.nvim_list_tabpages()
if num_tabs > 1 then
local tabpage_number = tostring(vim.api.nvim_tabpage_get_number(0))
return tabpage_number .. "/" .. tostring(num_tabs)
end
end
local change_mark = function(tab)
local already_marked = false
return tab.wins().foreach(function(win)
local bufnr = vim.fn.getwininfo(win.id)[1].bufnr
local bufinfo = vim.fn.getbufinfo(bufnr)[1]
if not already_marked and bufinfo.changed == 1 then
already_marked = true
return " "
else
return ""
end
end)
end
local window_count = function(tab)
local api = require "tabby.module.api"
local win_count = #api.get_tab_wins(tab.id)
if win_count == 1 then
return ""
else
return "[" .. win_count .. "]"
end
end
return {
"nanozuki/tabby.nvim",
event = "VeryLazy",
config = function()
require("tabby.tabline").set(function(line)
return {
{
{ " 󰓩 ", hl = theme.head },
{ tab_count(), hl = theme.head },
-- line.sep(" ", theme.head, theme.fill),
line.sep(" ", theme.head, theme.fill),
},
line.tabs().foreach(function(tab)
local hl = tab.is_current() and theme.current_tab or theme.tab
return {
-- line.sep("", hl, theme.fill),
line.sep("", hl, theme.fill),
tab.is_current() and "" or "",
tab_name(tab),
-- tab.close_btn("󰅖 "),
-- window_count(tab),
-- change_mark(tab),
-- line.sep(" ", hl, theme.fill),
line.sep(" ", hl, theme.fill),
hl = hl,
margin = " ",
}
end),
hl = theme.fill,
}
end, {
buf_name = {
mode = "unique",
},
})
end,
}