aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lua/luatab/highlight.lua40
-rw-r--r--lua/luatab/init.lua8
2 files changed, 46 insertions, 2 deletions
diff --git a/lua/luatab/highlight.lua b/lua/luatab/highlight.lua
new file mode 100644
index 0000000..c696135
--- /dev/null
+++ b/lua/luatab/highlight.lua
@@ -0,0 +1,40 @@
+-- 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
index 2141bbc..597af3a 100644
--- a/lua/luatab/init.lua
+++ b/lua/luatab/init.lua
@@ -44,13 +44,17 @@ local function tabDevicon(bufnr, isSelected)
dev, devhl = require'nvim-web-devicons'.get_icon(file, vim.fn.getbufvar(bufnr, '&filetype'))
end
if dev then
- return (isSelected and '%#'..devhl..'#' or '') .. dev .. (isSelected and '%#TabLineSel#' or '')
+ 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)
+ return (isSelected and '%#'..hl..'#' or '') .. dev .. (isSelected and '%#TabLineSel#' or '') .. ' '
end
return ''
end
local function tabSeparator(current)
- return ' ' .. (current < vim.fn.tabpagenr('$') and '%#TabLine#|' or '')
+ return (current < vim.fn.tabpagenr('$') and '%#TabLine#|' or '')
end
local function formatTab(current)