* Some colorschemes do some funky things with the comment highlight, most notably making them italic, which messes up the outline connector. Fix this by copying the foreground color from the comment hl into a new highlight. * Closes #42
67 lines
2.3 KiB
Lua
67 lines
2.3 KiB
Lua
local vim = vim
|
|
local config = require('symbols-outline.config')
|
|
local symbol_kinds = require('symbols-outline.symbols').kinds
|
|
local M = {}
|
|
|
|
M.markers = {
|
|
bottom = "└",
|
|
middle = "├",
|
|
vertical = "│",
|
|
horizontal = "─"
|
|
}
|
|
|
|
M.hovered_hl_ns = vim.api.nvim_create_namespace("hovered_item")
|
|
|
|
function M.clear_hover_highlight(bufnr)
|
|
vim.api.nvim_buf_clear_namespace(bufnr, M.hovered_hl_ns, 0, -1)
|
|
end
|
|
|
|
function M.add_hover_highlight(bufnr, line, col_start)
|
|
vim.api.nvim_buf_add_highlight(bufnr, M.hovered_hl_ns, "FocusedSymbol",
|
|
line, col_start, -1)
|
|
end
|
|
|
|
local function highlight_text(name, text, hl_group)
|
|
vim.cmd(string.format("syn match %s /%s/", name, text))
|
|
vim.cmd(string.format("hi def link %s %s", name, hl_group))
|
|
end
|
|
|
|
function M.setup_highlights()
|
|
-- Setup the FocusedSymbol highlight group if it hasnt been done already by
|
|
-- a theme or manually set
|
|
if vim.fn.hlexists('FocusedSymbol') == 0 then
|
|
vim.cmd 'hi FocusedSymbol term=italic,bold cterm=italic ctermbg=yellow ctermfg=darkblue gui=bold,italic guibg=yellow guifg=darkblue'
|
|
end
|
|
|
|
-- Some colorschemes do some funky things with the comment highlight, most
|
|
-- notably making them italic, which messes up the outline connector. Fix
|
|
-- this by copying the foreground color from the comment hl into a new
|
|
-- highlight.
|
|
local comment_fg_gui = vim.fn.synIDattr(vim.fn.hlID('SignColumn'), 'fg',
|
|
'gui')
|
|
local comment_fg_cterm = vim.fn.synIDattr(vim.fn.hlID('SignColumn'), 'fg',
|
|
'cterm')
|
|
|
|
|
|
vim.cmd(string.format('hi SymbolsOutlineConnector ctermfg=%s guifg=%s',
|
|
comment_fg_cterm, comment_fg_gui))
|
|
|
|
local symbols = config.options.symbols
|
|
|
|
-- markers
|
|
highlight_text("marker_middle", M.markers.middle, "SymbolsOutlineConnector")
|
|
highlight_text("marker_vertical", M.markers.vertical,
|
|
"SymbolsOutlineConnector")
|
|
highlight_text("markers_horizontal", M.markers.horizontal,
|
|
"SymbolsOutlineConnector")
|
|
highlight_text("markers_bottom", M.markers.bottom, "SymbolsOutlineConnector")
|
|
|
|
for _, value in ipairs(symbol_kinds) do
|
|
local symbol = symbols[value]
|
|
highlight_text(value, symbol.icon, symbol.hl)
|
|
end
|
|
|
|
end
|
|
|
|
return M
|