diff --git a/lua/core/default_config.lua b/lua/core/default_config.lua index 48203d1..98ecbb6 100644 --- a/lua/core/default_config.lua +++ b/lua/core/default_config.lua @@ -28,7 +28,11 @@ M.ui = { }, -- lazyload it when there are 1+ buffers - tabufline_lazyloaded = true, + tabufline = { + enabled = true, + lazyload = true, + override = {}, + }, } M.plugins = { diff --git a/lua/core/init.lua b/lua/core/init.lua index d731be5..f9c364e 100644 --- a/lua/core/init.lua +++ b/lua/core/init.lua @@ -72,9 +72,11 @@ autocmd("BufDelete", { end, }) -if require("core.utils").load_config().ui.tabufline_lazyloaded then +local tabufline_opts = require("core.utils").load_config().ui.tabufline + +if tabufline_opts.enabled and tabufline_opts.lazyload then require("core.lazy_load").tabufline() -else +elseif tabufline_opts.enabled then vim.opt.showtabline = 2 vim.opt.tabline = "%!v:lua.require'ui.tabline'.run()" end diff --git a/lua/core/utils.lua b/lua/core/utils.lua index 59d0ec5..075f976 100644 --- a/lua/core/utils.lua +++ b/lua/core/utils.lua @@ -228,15 +228,16 @@ M.tabuflinePrev = function() end end end + -- closes tab + all of its buffers -M.tabuflineCloseTab = function() +M.closeAllBufs = function(action) local bufs = vim.t.bufs or {} - vim.cmd "tabclose" - for _, buf in ipairs(bufs) do - vim.cmd("bd" .. buf) + M.close_buffer(buf) end + + vim.cmd(action == "closeTab" and "tabclose" or "enew") end return M diff --git a/lua/ui/tabline.lua b/lua/ui/tabline.lua index 900b692..d4505af 100644 --- a/lua/ui/tabline.lua +++ b/lua/ui/tabline.lua @@ -11,7 +11,8 @@ vim.cmd [[ vim.cmd "function! TbNewTab(a,b,c,d) \n tabnew \n endfunction" vim.cmd "function! TbGotoTab(tabnr,b,c,d) \n execute a:tabnr ..'tabnext' \n endfunction" -vim.cmd "function! TbTabClose(a,b,c,d) \n lua require('core.utils').tabuflineCloseTab() \n endfunction" +vim.cmd "function! TbTabClose(a,b,c,d) \n lua require('core.utils').closeAllBufs('closeTab') \n endfunction" +vim.cmd "function! TbCloseAllBufs(a,b,c,d) \n lua require('core.utils').closeAllBufs() \n endfunction" vim.cmd "function! TbToggle_theme(a,b,c,d) \n lua require('base46').toggle_theme() \n endfunction" vim.cmd "function! TbToggleTabs(a,b,c,d) \n let g:TbTabsToggled = !g:TbTabsToggled | redrawtabline \n endfunction" @@ -38,7 +39,10 @@ local function new_hl(group1, group2) return "%#" .. "Tbline" .. group1 .. group2 .. "#" end -local function Offset() +local M = {} + +-- covers area of nvimtree on tabufline +M.Offset = function() for _, win in pairs(api.nvim_tabpage_list_wins(0)) do if vim.bo[api.nvim_win_get_buf(win)].ft == "NvimTree" then return "%#NvimTreeNormal#" .. string.rep(" ", api.nvim_win_get_width(win) + 1) @@ -70,7 +74,7 @@ local function add_fileInfo(name, bufnr) end end -local function bufferlist() +M.bufferlist = function() local buffers = "" for _, nr in ipairs(vim.t.bufs or {}) do -- buf = bufnr @@ -99,7 +103,7 @@ end vim.g.TbTabsToggled = 0 -local function tablist() +M.tablist = function() local result, number_of_tabs = "", fn.tabpagenr "$" if number_of_tabs > 1 then @@ -119,12 +123,16 @@ local function tablist() end end -local function buttons() - return "%@TbToggle_theme@%#TbLineThemeToggleBtn#" .. vim.g.toggle_theme_icon .. "%X" +M.buttons = function() + local toggle_themeBtn = "%@TbToggle_theme@%#TbLineThemeToggleBtn#" .. vim.g.toggle_theme_icon .. "%X" + local CloseAllBufsBtn = "%@TbCloseAllBufs@%#TbLineCloseAllBufsBtn#" .. "  " .. "%X" + return toggle_themeBtn .. CloseAllBufsBtn end -return { - run = function() - return (Offset() or "") .. bufferlist() .. (tablist() or "") .. buttons() - end, -} +M.run = function() + return (M.Offset() or "") .. M.bufferlist() .. (M.tablist() or "") .. M.buttons() +end + +M = vim.tbl_deep_extend("force", M, require("core.utils").load_config().ui.tabufline.override) + +return M