|
|
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, |
|
|
}
|
|
|
|