fix: telescope close process and cleanup layout actions (#1480)
This commit is contained in:
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user