diff options
| -rw-r--r-- | .gitignore | 52 | ||||
| -rw-r--r-- | LICENSE | 1 | ||||
| -rw-r--r-- | Makefile | 9 | ||||
| -rw-r--r-- | README.md | 21 | ||||
| -rw-r--r-- | lua/cleantab/init.lua | 100 | ||||
| -rw-r--r-- | lua/luatab/highlight.lua | 40 | ||||
| -rw-r--r-- | lua/luatab/init.lua | 130 | 
7 files changed, 108 insertions, 245 deletions
| diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 32ae60e..0000000 --- a/.gitignore +++ /dev/null @@ -1,52 +0,0 @@ -# Compiled Lua sources -luac.out - -# luarocks build files -*.src.rock -*.zip -*.tar.gz - -# Object files -*.o -*.os -*.ko -*.obj -*.elf - -# Precompiled Headers -*.gch -*.pch - -# Libraries -*.lib -*.a -*.la -*.lo -*.def -*.exp - -# Shared objects (inc. Windows DLLs) -*.dll -*.so -*.so.* -*.dylib - -# Executables -*.exe -*.out -*.app -*.i*86 -*.x86_64 -*.hex - -# ctags -tags - -# helptags -doc/tags - -.DS_Store - -.github -.lua-format -.luacheckrc @@ -1,6 +1,7 @@  MIT License  Copyright (c) 2021 Alvaro Sevilla +Copyright (c) 2024 Tim Keller <tjkeller.xyz>  Permission is hereby granted, free of charge, to any person obtaining a copy  of this software and associated documentation files (the "Software"), to deal diff --git a/Makefile b/Makefile deleted file mode 100644 index 3f3f8d6..0000000 --- a/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -.DEFAULT_GOAL = check - -lint: -	@luacheck lua/luatab - -format: -	@for file in `find . -name '*.lua'`;do lua-format $$file -i; done; - -check: lint test @@ -1,42 +1,35 @@ -# luatab.nvim +# cleantab.nvim -<p align="center"> -  <img src="https://github.com/alvarosevilla95/luatab.nvim/blob/master/pics/tabline.png" /> -</p> +Fork of +[`alvarosevilla95/luatab.nvim`](https://github.com/alvarosevilla95/luatab.nvim)  ## Features  * Just a lua rewrite of the tabline render function  * No weird mixing buffers and tabs stuff  ## Install -Using packer.nvim: -```lua -use { 'alvarosevilla95/luatab.nvim', requires='nvim-tree/nvim-web-devicons' } -``` -  Using [`lazy.nvim`](https://github.com/folke/lazy.nvim)  ```lua -{ 'alvarosevilla95/luatab.nvim', dependencies = { 'nvim-tree/nvim-web-devicons' } } +{ 'https://git.tjkeller.xyz/cleantab.nvim' }  ```  ## Usage  Add this to your init.lua:  ```lua -require('luatab').setup{} +require('cleantab').setup{}  ```  ## Configuration  The plugin calls the `helpers.tabline` function to render the line. It uses the other functions defined in `helpers`, such as `cell,separator,devicon`. -You can pass overrides for any of these functions in `setup`. Please see `lua/luatab/init.lua` for details. +You can pass overrides for any of these functions in `setup`. Please see `lua/cleantab/init.lua` for details.  Example:  ``` -require('luatab').setup{ +require('cleantab').setup{      title = function() return '' end,      modified = function() return '' end,      windowCount = function() return '' end, -    devicon = function() return '' end,      separator = function() return '' end,  }  ``` 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, +} diff --git a/lua/luatab/highlight.lua b/lua/luatab/highlight.lua deleted file mode 100644 index c696135..0000000 --- a/lua/luatab/highlight.lua +++ /dev/null @@ -1,40 +0,0 @@ --- Shamelessly stolen from --- https://github.com/hoob3rt/lualine.nvim/blob/master/lua/lualine/utils/utils.lua - -local M = {} - -M.highlight = function(name, foreground, background) -  local command = {'highlight', name} -  if foreground and foreground ~= 'none' then -    table.insert(command, 'guifg=' .. foreground) -  end -  if background and background ~= 'none' then -    table.insert(command, 'guibg=' .. background) -  end -  vim.cmd(table.concat(command, ' ')) -end - -M.create_component_highlight_group = function(color, highlight_tag) -  if color.bg and color.fg then -    local highlight_group_name = table.concat({'luatab', highlight_tag}, '_') -    M.highlight(highlight_group_name, color.fg, color.bg) -    return highlight_group_name -  end -end - -M.extract_highlight_colors = function(color_group, scope) -  if vim.fn.hlexists(color_group) == 0 then return nil end -  local color = vim.api.nvim_get_hl_by_name(color_group, true) -  if color.background ~= nil then -    color.bg = string.format('#%06x', color.background) -    color.background = nil -  end -  if color.foreground ~= nil then -    color.fg = string.format('#%06x', color.foreground) -    color.foreground = nil -  end -  if scope then return color[scope] end -  return color -end - -return M diff --git a/lua/luatab/init.lua b/lua/luatab/init.lua deleted file mode 100644 index d18d6e7..0000000 --- a/lua/luatab/init.lua +++ /dev/null @@ -1,130 +0,0 @@ -local M = {} - -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 vim.fn.pathshorten(vim.fn.fnamemodify(file, ':p:~:t')) -    end -end - -M.modified = function(bufnr) -    return vim.fn.getbufvar(bufnr, '&modified') == 1 and '[+] ' or '' -end - -M.windowCount = function(index) -    local nwins = vim.fn.tabpagewinnr(index, '$') -    return nwins > 1 and '(' .. nwins .. ') ' or '' -end - -M.devicon = function(bufnr, isSelected) -    local icon, devhl -    local file = vim.fn.fnamemodify(vim.fn.bufname(bufnr), ':t') -    local buftype = vim.fn.getbufvar(bufnr, '&buftype') -    local filetype = vim.fn.getbufvar(bufnr, '&filetype') -    local devicons = require'nvim-web-devicons' -    if filetype == 'TelescopePrompt' then -        icon, devhl = devicons.get_icon('telescope') -    elseif filetype == 'fugitive' then -        icon, devhl = devicons.get_icon('git') -    elseif filetype == 'vimwiki' then -        icon, devhl = devicons.get_icon('markdown') -    elseif buftype == 'terminal' then -        icon, devhl = devicons.get_icon('zsh') -    else -        icon, devhl = devicons.get_icon(file, vim.fn.expand('#'..bufnr..':e')) -    end -    if icon then -        local h = require'luatab.highlight' -        local fg = h.extract_highlight_colors(devhl, 'fg') -        local bg = h.extract_highlight_colors('TabLineSel', 'bg') -        local hl = h.create_component_highlight_group({bg = bg, fg = fg}, devhl) -        local selectedHlStart = (isSelected and hl) and '%#'..hl..'#' or '' -        local selectedHlEnd = isSelected and '%#TabLineSel#' or '' -        return selectedHlStart .. icon .. selectedHlEnd .. ' ' -    end -    return '' -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#') - -    return hl .. '%' .. index .. 'T' .. ' ' .. -        M.windowCount(index) .. -        M.title(bufnr) .. ' ' .. -        M.modified(bufnr) .. -        M.devicon(bufnr, isSelected) .. '%T' .. -        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) -    opts = opts or {} -    if opts.title then M.title = opts.title end -    if opts.modified then M.modified = opts.modified end -    if opts.windowCount then M.windowCount = opts.windowCount end -    if opts.devicon then M.devicon = opts.devicon end -    if opts.separator then M.separator = opts.separator end -    if opts.cell then M.cell = opts.cell end -    if opts.tabline then M.tabline = opts.tabline end - -    vim.opt.tabline = '%!v:lua.require\'luatab\'.helpers.tabline()' -end - -local warning = function() -    error [[ -Hi, I've updated luatab.nvim to allow some proper configuration. As a result, I need to make a breaking change to the config. Apologies for the inconvinence. -If you had: -    vim.o.tabline = '%!v:lua.require\'luatab\'.tabline()' -please replace it with -    require('luatab').setup({}) -]] -end - -return { -    helpers = M, -    setup = setup, -    tabline = warning, -} | 
