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