Skip to content

Commit 404dfb0

Browse files
committed
refactor(tabline): Added ability to reset tabline
If the cached value of the tabline is "" or `nil` then it is reset. feat(tabline): Added ability to Toggle tabline Use `tabline.Toggle()` for toggling it.
1 parent cc1931f commit 404dfb0

File tree

1 file changed

+45
-5
lines changed

1 file changed

+45
-5
lines changed

lua/bars/tabline.lua

Lines changed: 45 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
local tabline = {}
22
local components = require("bars.components.tabline");
33

4+
--- Custom tabline.
5+
---@type string
6+
local TBL = "%!v:lua.require('bars.tabline').render()";
7+
48
---@class tabline.config
59
tabline.config = {
610
---|fS
@@ -204,9 +208,25 @@ end
204208
tabline.detach = function ()
205209
---|fS
206210

207-
vim.scheduleefer_fn(function ()
211+
vim.schedule(function ()
208212
tabline.state.attached = false;
209-
vim.o.tabline = vim.o.__tabline or "";
213+
214+
--- Cached tabline.
215+
---@type string | nil
216+
local _tl = vim.g.__tabline or "";
217+
218+
if _tl == "" or _tl == nil then
219+
--- Reset tabline.
220+
vim.cmd("set tabline&");
221+
else
222+
vim.api.nvim_set_option_value(
223+
"tabline",
224+
_tl,
225+
{
226+
scope = "global"
227+
}
228+
);
229+
end
210230

211231
vim.g.__tlID = nil;
212232
vim.g.__tabline = nil;
@@ -216,7 +236,9 @@ tabline.detach = function ()
216236
end
217237

218238
tabline.can_attach = function ()
219-
if not tabline.config.condition then
239+
if tabline.state.enable ~= true then
240+
return false;
241+
elseif tabline.config.condition == nil then
220242
return true;
221243
end
222244

@@ -239,8 +261,8 @@ tabline.attach = function ()
239261

240262
tabline.update_id();
241263

242-
vim.g.__tabline = vim.o.tabline;
243-
vim.o.tabline = "%!v:lua.require('bars.tabline').render()";
264+
vim.g.__tabline = vim.o.tabline == TBL and "" or vim.o.tabline;
265+
vim.o.tabline = TBL;
244266

245267
---|fE
246268
end
@@ -255,6 +277,24 @@ tabline.clean = function ()
255277
end);
256278
end
257279

280+
--- Toggles state of tabline.
281+
tabline.toggle = function ()
282+
if tabline.state.attached == true then
283+
tabline.detach();
284+
else
285+
tabline.attach();
286+
end
287+
end
288+
289+
--- Toggles tabline.
290+
tabline.Toggle = function ()
291+
tabline.toggle();
292+
293+
--- true -> false,
294+
--- false -> true
295+
tabline.state.enable = not tabline.state.enable;
296+
end
297+
258298
--- Sets up the tabline module.
259299
---@param config tabline.config | nil
260300
tabline.setup = function (config)

0 commit comments

Comments
 (0)