From 683c8952717e8989ffc1585de581e3a8a62e1f2b Mon Sep 17 00:00:00 2001 From: simrat39 Date: Mon, 19 Apr 2021 19:13:25 -0700 Subject: [PATCH] outline: Highlight item in outline when hovering over it in code --- lua/symbols-outline.lua | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/lua/symbols-outline.lua b/lua/symbols-outline.lua index 8fd004c..9967993 100644 --- a/lua/symbols-outline.lua +++ b/lua/symbols-outline.lua @@ -20,7 +20,7 @@ local function setup_autocmd() vim.cmd( "autocmd InsertLeave,BufEnter,BufWinEnter,TabEnter,BufWritePost * :lua require('symbols-outline')._refresh()") vim.cmd( - "autocmd BufEnter,TabEnter * :lua print('Bruh')") + "autocmd CursorHold * :lua require('symbols-outline')._highlight_current_item()") end local function getParams() @@ -111,6 +111,7 @@ local function setup_highlights() local symbol = symbols[value] highlight_text(value, symbol.icon, symbol.hl) end + vim.cmd('hi FocusedSymbol guibg=#e50050') end local function get_lines(outline_items, bufnr, winnr, lines) @@ -181,6 +182,36 @@ function D._refresh() 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) vim.api.nvim_buf_set_keymap(bufnr, "n", "", ":lua require('symbols-outline').goto_location()",