fix: telescope close process and cleanup layout actions (#1480)

This commit is contained in:
Simon Hauser
2021-11-23 21:11:05 +01:00
committed by GitHub
parent 6daf35c88c
commit 7695d224c8
3 changed files with 16 additions and 16 deletions

View File

@@ -240,6 +240,7 @@ end
actions._close = function(prompt_bufnr, keepinsert) actions._close = function(prompt_bufnr, keepinsert)
action_state.get_current_history():reset() action_state.get_current_history():reset()
local picker = action_state.get_current_picker(prompt_bufnr) 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 local original_win_id = picker.original_win_id
actions.close_pum(prompt_bufnr) actions.close_pum(prompt_bufnr)
@@ -247,7 +248,8 @@ actions._close = function(prompt_bufnr, keepinsert)
vim.cmd [[stopinsert]] vim.cmd [[stopinsert]]
end 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) pcall(a.nvim_set_current_win, original_win_id)
end end

View File

@@ -8,7 +8,13 @@ local action_state = require "telescope.actions.state"
local state = require "telescope.state" local state = require "telescope.state"
local layout_strats = require "telescope.pickers.layout_strategies" 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. --- Toggle preview window.
--- - Note: preview window can be toggled even if preview is set to false. --- - 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 ---@param prompt_bufnr number: The prompt bufnr
action_layout.cycle_layout_prev = get_cycle_layout(-1) action_layout.cycle_layout_prev = get_cycle_layout(-1)
action_layout = transform_mod(action_layout)
return action_layout return action_layout

View File

@@ -461,14 +461,12 @@ function Picker:find()
-- TODO: Use WinLeave as well? -- TODO: Use WinLeave as well?
local on_buf_leave = string.format( local on_buf_leave = string.format(
[[ autocmd BufLeave <buffer=%s> ++nested ++once :silent lua require('telescope.pickers').on_close_prompt(%s)]], [[ autocmd BufLeave <buffer> ++nested ++once :silent lua require('telescope.pickers').on_close_prompt(%s)]],
prompt_bufnr,
prompt_bufnr prompt_bufnr
) )
local on_vim_resize = string.format( local on_vim_resize = string.format(
[[ autocmd VimResized <buffer=%s> ++nested :lua require('telescope.pickers').on_resize_window(%s)]], [[ autocmd VimResized <buffer> ++nested :lua require('telescope.pickers').on_resize_window(%s)]],
prompt_bufnr,
prompt_bufnr prompt_bufnr
) )
@@ -672,8 +670,6 @@ function Picker:set_prompt(str)
end end
function Picker.close_windows(status) function Picker.close_windows(status)
-- make sure we don't have BufLeave autocmd.
vim.cmd(string.format([[ autocmd! PickerInsert BufLeave <buffer=%s> ]], status.prompt_bufnr))
local prompt_win = status.prompt_win local prompt_win = status.prompt_win
local results_win = status.results_win local results_win = status.results_win
local preview_win = status.preview_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 results_border_win = status.results_border_win
local preview_border_win = status.preview_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("results_win", results_win, true, true)
utils.win_delete("preview_win", preview_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("results_border_win", results_border_win, true, true)
utils.win_delete("preview_border_win", preview_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 vim.defer_fn(function()
-- so make sure that buffers created in Picker are deleted. utils.win_delete("prompt_win", prompt_win, true)
utils.buf_delete(status.prompt_bufnr) end, 10)
utils.buf_delete(status.results_bufnr)
utils.buf_delete(status.preview_bufnr)
-- vim.cmd(string.format("bdelete! %s", status.prompt_bufnr))
state.clear_status(status.prompt_bufnr) state.clear_status(status.prompt_bufnr)
end end