From 7695d224c81e4ceeb3100d759c296814183ccfae Mon Sep 17 00:00:00 2001 From: Simon Hauser Date: Tue, 23 Nov 2021 21:11:05 +0100 Subject: [PATCH] fix: telescope close process and cleanup layout actions (#1480) --- lua/telescope/actions/init.lua | 4 +++- lua/telescope/actions/layout.lua | 9 ++++++++- lua/telescope/pickers.lua | 19 +++++-------------- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/lua/telescope/actions/init.lua b/lua/telescope/actions/init.lua index 0da521b..c16be44 100644 --- a/lua/telescope/actions/init.lua +++ b/lua/telescope/actions/init.lua @@ -240,6 +240,7 @@ end actions._close = function(prompt_bufnr, keepinsert) action_state.get_current_history():reset() local picker = action_state.get_current_picker(prompt_bufnr) + local prompt_win = state.get_status(prompt_bufnr).prompt_win local original_win_id = picker.original_win_id actions.close_pum(prompt_bufnr) @@ -247,7 +248,8 @@ actions._close = function(prompt_bufnr, keepinsert) vim.cmd [[stopinsert]] end - require("telescope.pickers").on_close_prompt(prompt_bufnr) + vim.api.nvim_win_close(prompt_win, true) + pcall(vim.cmd, string.format([[silent bdelete! %s]], prompt_bufnr)) pcall(a.nvim_set_current_win, original_win_id) end diff --git a/lua/telescope/actions/layout.lua b/lua/telescope/actions/layout.lua index f40151f..7131823 100644 --- a/lua/telescope/actions/layout.lua +++ b/lua/telescope/actions/layout.lua @@ -8,7 +8,13 @@ local action_state = require "telescope.actions.state" local state = require "telescope.state" local layout_strats = require "telescope.pickers.layout_strategies" -local action_layout = {} +local transform_mod = require("telescope.actions.mt").transform_mod + +local action_layout = setmetatable({}, { + __index = function(_, k) + error("'telescope.actions.layout' does not have a value: " .. tostring(k)) + end, +}) --- Toggle preview window. --- - Note: preview window can be toggled even if preview is set to false. @@ -137,4 +143,5 @@ action_layout.cycle_layout_next = get_cycle_layout(1) ---@param prompt_bufnr number: The prompt bufnr action_layout.cycle_layout_prev = get_cycle_layout(-1) +action_layout = transform_mod(action_layout) return action_layout diff --git a/lua/telescope/pickers.lua b/lua/telescope/pickers.lua index 936f377..ff11568 100644 --- a/lua/telescope/pickers.lua +++ b/lua/telescope/pickers.lua @@ -461,14 +461,12 @@ function Picker:find() -- TODO: Use WinLeave as well? local on_buf_leave = string.format( - [[ autocmd BufLeave ++nested ++once :silent lua require('telescope.pickers').on_close_prompt(%s)]], - prompt_bufnr, + [[ autocmd BufLeave ++nested ++once :silent lua require('telescope.pickers').on_close_prompt(%s)]], prompt_bufnr ) local on_vim_resize = string.format( - [[ autocmd VimResized ++nested :lua require('telescope.pickers').on_resize_window(%s)]], - prompt_bufnr, + [[ autocmd VimResized ++nested :lua require('telescope.pickers').on_resize_window(%s)]], prompt_bufnr ) @@ -672,8 +670,6 @@ function Picker:set_prompt(str) end function Picker.close_windows(status) - -- make sure we don't have BufLeave autocmd. - vim.cmd(string.format([[ autocmd! PickerInsert BufLeave ]], status.prompt_bufnr)) local prompt_win = status.prompt_win local results_win = status.results_win local preview_win = status.preview_win @@ -682,7 +678,6 @@ function Picker.close_windows(status) local results_border_win = status.results_border_win local preview_border_win = status.preview_border_win - utils.win_delete("prompt_win", prompt_win, true, true) utils.win_delete("results_win", results_win, true, true) utils.win_delete("preview_win", preview_win, true, true) @@ -690,13 +685,9 @@ function Picker.close_windows(status) utils.win_delete("results_border_win", results_border_win, true, true) utils.win_delete("preview_border_win", preview_border_win, true, true) - -- Buffers should be deleted but it may be also the case that buffer was swapped in window - -- so make sure that buffers created in Picker are deleted. - utils.buf_delete(status.prompt_bufnr) - utils.buf_delete(status.results_bufnr) - utils.buf_delete(status.preview_bufnr) - - -- vim.cmd(string.format("bdelete! %s", status.prompt_bufnr)) + vim.defer_fn(function() + utils.win_delete("prompt_win", prompt_win, true) + end, 10) state.clear_status(status.prompt_bufnr) end