Highlight icons using highlight regions rather than matching rules

This commit is contained in:
Matthew Schauer
2022-02-02 21:01:31 -08:00
parent 0347928385
commit 70ddcccbca
3 changed files with 19 additions and 9 deletions

View File

@@ -12,6 +12,8 @@ local function is_buffer_outline(bufnr)
return string.match(name, "OUTLINE") ~= nil and ft == "Outline" and isValid
end
local hlns = vim.api.nvim_create_namespace("symbols-outline-icon-highlight")
function M.write_outline(bufnr, lines)
if not is_buffer_outline(bufnr) then return end
vim.api.nvim_buf_set_option(bufnr, "modifiable", true)
@@ -19,6 +21,13 @@ function M.write_outline(bufnr, lines)
vim.api.nvim_buf_set_option(bufnr, "modifiable", false)
end
function M.add_highlights(bufnr, hl_info)
for line, line_hl in ipairs(hl_info) do
hl_start, hl_end, hl_type = unpack(line_hl)
vim.api.nvim_buf_add_highlight(bufnr, hlns, hl_type, line - 1, hl_start - 1, hl_end)
end
end
local ns = vim.api.nvim_create_namespace("symbols-outline-virt-text")
function M.write_details(bufnr, lines)
@@ -41,11 +50,12 @@ end
-- runs the whole writing routine where the text is cleared, new data is parsed
-- and then written
function M.parse_and_write(bufnr, flattened_outline_items)
local lines = parser.get_lines(flattened_outline_items)
local lines, hl_info = parser.get_lines(flattened_outline_items)
M.write_outline(bufnr, lines)
clear_virt_text(bufnr)
local details = parser.get_details(flattened_outline_items)
M.add_highlights(bufnr, hl_info)
M.write_details(bufnr, details)
end