diff options
author | Tim Keller <tjkeller.xyz> | 2024-11-27 20:05:51 -0600 |
---|---|---|
committer | Tim Keller <tjkeller.xyz> | 2024-11-27 20:05:51 -0600 |
commit | 35e36ce317d8ac8fa579118f5a16ca35bd47e353 (patch) | |
tree | 79b13adb813ea0ce539151c359a73f18105244e9 /lua/cleantab | |
parent | 1b488d80772e59c6fde2453929d4060118c39983 (diff) | |
download | minitab.nvim-35e36ce317d8ac8fa579118f5a16ca35bd47e353.tar.xz minitab.nvim-35e36ce317d8ac8fa579118f5a16ca35bd47e353.zip |
change to cleantab
Diffstat (limited to 'lua/cleantab')
-rw-r--r-- | lua/cleantab/init.lua | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/lua/cleantab/init.lua b/lua/cleantab/init.lua new file mode 100644 index 0000000..aa4a974 --- /dev/null +++ b/lua/cleantab/init.lua @@ -0,0 +1,100 @@ +local M = {} + +M.fileTitle = function(file) + file = vim.fn.fnamemodify(file, ':p:~') + local tail = vim.fn.fnamemodify(file, ':t') + + if not tail then + return vim.fn.fnamemodify(file, ':p:~:h') .. '/' -- e.g. ~/dir/ + elseif tail == 'init.lua' + or tail == '__init__.py' then + return vim.fn.fnamemodify(vim.fn.fnamemodify(file, ':h'), ':t') .. '/' .. tail -- e.g. luatab/init.lua + else + return tail + end +end + +M.title = function(bufnr) + local file = vim.fn.bufname(bufnr) + local buftype = vim.fn.getbufvar(bufnr, '&buftype') + local filetype = vim.fn.getbufvar(bufnr, '&filetype') + + if buftype == 'help' then + return 'help:' .. vim.fn.fnamemodify(file, ':t:r') + elseif buftype == 'quickfix' then + return 'quickfix' + elseif filetype == 'TelescopePrompt' then + return 'Telescope' + elseif filetype == 'git' then + return 'Git' + elseif filetype == 'fugitive' then + return 'Fugitive' + elseif filetype == 'NvimTree' then + return 'NvimTree' + elseif filetype == 'oil' then + return 'Oil' + elseif file:sub(file:len()-2, file:len()) == 'FZF' then + return 'FZF' + elseif buftype == 'terminal' then + local _, mtch = string.match(file, "term:(.*):(%a+)") + return mtch ~= nil and mtch or vim.fn.fnamemodify(vim.env.SHELL, ':t') + elseif file == '' then + return '[No Name]' + else + return M.fileTitle(vim.fn.simplify(file)) + end +end + +M.modified = function(bufnr) + return vim.fn.getbufvar(bufnr, '&modified') == 1 and '+' or '' +end + +M.windowCount = function(index, hl) + local nwins = vim.fn.tabpagewinnr(index, '$') + return nwins > 1 and '%#TabLineSel#' .. nwins .. hl or '' +end + +M.separator = function(index) + return (index < vim.fn.tabpagenr('$') and '%#TabLine#|' or '') +end + +M.cell = function(index) + local isSelected = vim.fn.tabpagenr() == index + local buflist = vim.fn.tabpagebuflist(index) + local winnr = vim.fn.tabpagewinnr(index) + local bufnr = buflist[winnr] + local hl = (isSelected and '%#TabLineSel#' or '%#TabLine#') + + local prefix = M.windowCount(index, hl) .. M.modified(bufnr) .. ' ' + return hl .. '%' .. index .. 'T' .. ' ' .. + (prefix == ' ' and '' or prefix) .. + M.title(bufnr) .. ' ' .. + M.separator(index) +end + +M.tabline = function() + local line = '' + for i = 1, vim.fn.tabpagenr('$'), 1 do + line = line .. M.cell(i) + end + line = line .. '%#TabLineFill#%=' + if vim.fn.tabpagenr('$') > 1 then + line = line .. '%#TabLine#%999XX' + end + return line +end + +local setup = function(opts) + if opts then + for key, value in pairs(opts) do + M[key] = value + end + end + + vim.opt.tabline = '%!v:lua.require\'luatab\'.helpers.tabline()' +end + +return { + helpers = M, + setup = setup, +} |