Files
outline.nvim/lua/symbols-outline/ui.lua
simrat39 1784dcc520 fix(ui): Use a seperate highlight for connectors
* 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
2021-07-27 15:16:03 -07:00

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