馃 a tiny, customizable statusline for neovim
1vim.g.tablinefn = function()
2 local tabfn = require("lylla.config").get().tabline
3 if tabfn == vim.NIL or type(tabfn) ~= "function" then
4 return
5 end
6
7 local utils = require("lylla.utils")
8
9 return utils.fold(tabfn())
10end
11
12local M, H = {}, {}
13
14M.setup = function()
15 vim.o.tabline = "%!v:lua.vim.g.tablinefn()"
16end
17
18-- helpers ====================================================================
19
20function H.fortabwins(tabn, f)
21 local buflist = vim.fn.tabpagebuflist(tabn)
22
23 return vim
24 .iter(setmetatable({
25 idx = 0,
26 }, {
27 __call = function(t)
28 local i = t.idx + 1
29 if i > vim.fn.tabpagewinnr(tabn, "$") then
30 return
31 end
32 t.idx = i
33 return t.idx
34 end,
35 }))
36 :fold({}, function(t, i)
37 local buf = buflist[i]
38 table.insert(t, { f(i, i == vim.fn.tabpagewinnr(tabn), buf) })
39 return t
40 end)
41end
42
43function H.fortabs(f)
44 return vim
45 .iter(setmetatable({
46 idx = 0,
47 }, {
48 __call = function(t)
49 local i = t.idx + 1
50 if i > vim.fn.tabpagenr("$") then
51 return
52 end
53 t.idx = i
54 return t.idx
55 end,
56 }))
57 :fold({}, function(t, i)
58 table.insert(t, { f(i, i == vim.fn.tabpagenr()) })
59 return t
60 end)
61end
62
63return vim.defaulttable(function(k)
64 return M[k] or H[k]
65end)