馃 a tiny, customizable statusline for neovim
at main 65 lines 1.3 kB view raw
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)