diff --git a/README.md b/README.md index 86cc770..fb52da1 100644 --- a/README.md +++ b/README.md @@ -117,7 +117,7 @@ Key: - ✅ Open handler checks if view is not already open (#235 by eyalz800) -- auto_jump config param +- auto_goto config param (#229 by stickperson) - ✅ Update nerd fonts to 3.0 @@ -357,6 +357,8 @@ local opts = { -- Auto close the outline window if goto_location is triggered and not for -- peek_location auto_close = false, + -- Automatically go to location in code when navigating outline window + auto_goto = false, -- Vim options for the outline window show_numbers = false, diff --git a/doc/symbols-outline.txt b/doc/symbols-outline.txt index 18ddd7d..5006269 100644 --- a/doc/symbols-outline.txt +++ b/doc/symbols-outline.txt @@ -132,7 +132,7 @@ Key: < - ✅ Open handler checks if view is not already open (#235 by eyalz800) -- auto_jump config param (#229 by stickperson) +- auto_goto config param (#229 by stickperson) - ✅ Update nerd fonts to 3.0 (#225 by anstadnik) - ✅ fix(folding): optimize fold/unfold all (#223 by wjdwndud0114) - ✅ Support markdown setext-style headers (#222 by msr1k) @@ -333,7 +333,9 @@ Default values are shown: -- Auto close the outline window if goto_location is triggered and not for -- peek_location auto_close = false, - + -- Automatically jump to location in code when navigating outline window + auto_goto = false, + -- Vim options for the outline window show_numbers = false, show_relative_numbers = false, @@ -458,7 +460,6 @@ COMMANDS *symbols-outline-symbols-outline.nvim-commands* - **:SymbolsOutlineStatus** Display current provider and outline window status in the messages area. - LUA API ~ >lua diff --git a/lua/symbols-outline/config.lua b/lua/symbols-outline/config.lua index 9cb007d..a74a7ea 100644 --- a/lua/symbols-outline/config.lua +++ b/lua/symbols-outline/config.lua @@ -18,6 +18,7 @@ M.defaults = { border = 'single', relative_width = true, auto_close = false, + auto_goto = false, auto_preview = false, open_hover_on_preview = true, show_numbers = false, diff --git a/lua/symbols-outline/init.lua b/lua/symbols-outline/init.lua index 928c387..950e3f4 100644 --- a/lua/symbols-outline/init.lua +++ b/lua/symbols-outline/init.lua @@ -128,6 +128,7 @@ function M.__goto_location(change_focus) end end +-- Wraps __goto_location and handles auto_close function M._goto_location(change_focus) M.__goto_location(change_focus) if change_focus and config.options.auto_close then @@ -152,6 +153,48 @@ function M._toggle_fold(move_cursor, node_index) end end +local function setup_buffer_autocmd() + if config.options.auto_preview then + vim.api.nvim_create_autocmd('CursorHold', { + buffer = 0, + callback = require('symbols-outline.preview').show, + }) + else + vim.api.nvim_create_autocmd('CursorMoved', { + buffer = 0, + callback = function() + require('symbols-outline.preview').close() + if config.options.auto_goto then + M._goto_location(false) + end + end, + }) + end +end + +local function setup_buffer_autocmd() + if config.options.auto_preview then + vim.api.nvim_create_autocmd('CursorMoved', { + buffer = 0, + callback = require('symbols-outline.preview').show, + }) + else + vim.api.nvim_create_autocmd('CursorMoved', { + buffer = 0, + callback = require('symbols-outline.preview').close, + }) + end + if config.options.auto_goto then + vim.api.nvim_create_autocmd('CursorMoved', { + buffer = 0, + callback = function() + -- Don't use _goto_location because we don't want to auto-close + M.__goto_location(false) + end + }) + end +end + function M._set_folded(folded, move_cursor, node_index) local node = M.state.flattened_outline_items[node_index] or M._current_node() local changed = (folded ~= folding.is_folded(node))