From 7f37dfa7fdc09549ccbca1c16f3df13930db493e Mon Sep 17 00:00:00 2001 From: simrat39 Date: Wed, 21 Apr 2021 22:26:01 -0700 Subject: [PATCH] fix: Handle toggling logic outside the handler * This way we can close the window while being focused in it. Before, the window was not closed because the handler wasn't called because no lsp was attached --- lua/symbols-outline.lua | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/lua/symbols-outline.lua b/lua/symbols-outline.lua index f0401b0..552a01c 100644 --- a/lua/symbols-outline.lua +++ b/lua/symbols-outline.lua @@ -343,25 +343,26 @@ local function handler(_, _, result) if result == nil then return end D.state.code_win = vim.api.nvim_get_current_win() - if D.state.outline_buf == nil then - setup_buffer() - D.state.outline_items = parse(result) - D.state.flattened_outline_items = flatten(parse(result)) + setup_buffer() + D.state.outline_items = parse(result) + D.state.flattened_outline_items = flatten(parse(result)) - local lines = get_lines(D.state.flattened_outline_items) - write_outline(D.state.outline_buf, lines) + local lines = get_lines(D.state.flattened_outline_items) + write_outline(D.state.outline_buf, lines) - local details = get_details(D.state.outline_items, D.state.outline_buf, - D.state.outline_win) - write_details(D.state.outline_buf, details) - setup_highlights() - else - vim.api.nvim_win_close(D.state.outline_win, true) - end + local details = get_details(D.state.outline_items, D.state.outline_buf, + D.state.outline_win) + write_details(D.state.outline_buf, details) + setup_highlights() end function D.toggle_outline() - vim.lsp.buf_request(0, "textDocument/documentSymbol", getParams(), handler) + if D.state.outline_buf == nil then + vim.lsp.buf_request(0, "textDocument/documentSymbol", getParams(), + handler) + else + vim.api.nvim_win_close(D.state.outline_win, true) + end end function D.setup(opts)