outline: Highlight item in outline when hovering over it in code

This commit is contained in:
simrat39
2021-04-19 19:13:25 -07:00
parent 9c2e6b1976
commit 683c895271

View File

@@ -20,7 +20,7 @@ local function setup_autocmd()
vim.cmd( vim.cmd(
"autocmd InsertLeave,BufEnter,BufWinEnter,TabEnter,BufWritePost * :lua require('symbols-outline')._refresh()") "autocmd InsertLeave,BufEnter,BufWinEnter,TabEnter,BufWritePost * :lua require('symbols-outline')._refresh()")
vim.cmd( vim.cmd(
"autocmd BufEnter,TabEnter * :lua print('Bruh')") "autocmd CursorHold * :lua require('symbols-outline')._highlight_current_item()")
end end
local function getParams() local function getParams()
@@ -111,6 +111,7 @@ local function setup_highlights()
local symbol = symbols[value] local symbol = symbols[value]
highlight_text(value, symbol.icon, symbol.hl) highlight_text(value, symbol.icon, symbol.hl)
end end
vim.cmd('hi FocusedSymbol guibg=#e50050')
end end
local function get_lines(outline_items, bufnr, winnr, lines) local function get_lines(outline_items, bufnr, winnr, lines)
@@ -181,6 +182,36 @@ function D._refresh()
end end
end end
local hovered_hl_ns = vim.api.nvim_create_namespace("hovered_item")
function D._highlight_current_item()
-- setup_highlights()
vim.api.nvim_buf_clear_namespace(D.state.outline_buf, hovered_hl_ns, 0, -1)
if D.state.outline_buf == nil or vim.api.nvim_get_current_buf() ==
D.state.outline_buf then return end
local hovered_line = vim.api.nvim_win_get_cursor(
vim.api.nvim_get_current_win())[1]
local nodes = {}
for index, value in ipairs(D.state.linear_outline_items) do
if value.line == hovered_line - 1 then
value.line_in_outline = index
table.insert(nodes, value)
end
end
for _, value in ipairs(nodes) do
vim.api.nvim_buf_add_highlight(D.state.outline_buf, hovered_hl_ns,
"FocusedSymbol",
value.line_in_outline - 1,
value.depth * 2, -1)
vim.api.nvim_win_set_cursor(D.state.outline_win,
{value.line_in_outline, 1})
end
end
local function set_onEnter_keymap(bufnr) local function set_onEnter_keymap(bufnr)
vim.api.nvim_buf_set_keymap(bufnr, "n", "<Cr>", vim.api.nvim_buf_set_keymap(bufnr, "n", "<Cr>",
":lua require('symbols-outline').goto_location()<Cr>", ":lua require('symbols-outline').goto_location()<Cr>",