fix(sidebar): fix closing sidebar when closing its components (#2759)
This commit is contained in:
@@ -1494,20 +1494,6 @@ function Sidebar:on_mount(opts)
|
|||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
api.nvim_create_autocmd("WinClosed", {
|
|
||||||
group = self.augroup,
|
|
||||||
callback = function(args)
|
|
||||||
local closed_winid = tonumber(args.match)
|
|
||||||
if closed_winid then
|
|
||||||
local container = self:get_sidebar_window(closed_winid)
|
|
||||||
-- Ignore closing selected files and todos windows because they can disappear during normal operation
|
|
||||||
if container and container ~= self.containers.selected_files and container ~= self.containers.todos then
|
|
||||||
self:close()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
for _, container in pairs(self.containers) do
|
for _, container in pairs(self.containers) do
|
||||||
if container.mount and container.bufnr and api.nvim_buf_is_valid(container.bufnr) then
|
if container.mount and container.bufnr and api.nvim_buf_is_valid(container.bufnr) then
|
||||||
Utils.mark_as_sidebar_buffer(container.bufnr)
|
Utils.mark_as_sidebar_buffer(container.bufnr)
|
||||||
@@ -1690,7 +1676,7 @@ end
|
|||||||
---@return NuiSplit|nil
|
---@return NuiSplit|nil
|
||||||
function Sidebar:get_sidebar_window(winid)
|
function Sidebar:get_sidebar_window(winid)
|
||||||
for _, container in pairs(self.containers) do
|
for _, container in pairs(self.containers) do
|
||||||
if container and container.winid == winid then return container end
|
if container.winid == winid then return container end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -3137,6 +3123,26 @@ end
|
|||||||
|
|
||||||
---@param opts AskOptions
|
---@param opts AskOptions
|
||||||
function Sidebar:render(opts)
|
function Sidebar:render(opts)
|
||||||
|
self.augroup = api.nvim_create_augroup("avante_sidebar_" .. self.id, { clear = true })
|
||||||
|
|
||||||
|
-- This autocommand needs to be registered first, before NuiSplit
|
||||||
|
-- registers their own handlers for WinClosed events that will set
|
||||||
|
-- container.winid to nil, which will cause Sidebar:get_sidebar_window()
|
||||||
|
-- to fail.
|
||||||
|
api.nvim_create_autocmd("WinClosed", {
|
||||||
|
group = self.augroup,
|
||||||
|
callback = function(args)
|
||||||
|
local closed_winid = tonumber(args.match)
|
||||||
|
if closed_winid then
|
||||||
|
local container = self:get_sidebar_window(closed_winid)
|
||||||
|
-- Ignore closing selected files and todos windows because they can disappear during normal operation
|
||||||
|
if container and container ~= self.containers.selected_files and container ~= self.containers.todos then
|
||||||
|
self:close()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
if opts.sidebar_pre_render then opts.sidebar_pre_render(self) end
|
if opts.sidebar_pre_render then opts.sidebar_pre_render(self) end
|
||||||
|
|
||||||
local function get_position()
|
local function get_position()
|
||||||
@@ -3166,9 +3172,6 @@ function Sidebar:render(opts)
|
|||||||
|
|
||||||
self.containers.result:mount()
|
self.containers.result:mount()
|
||||||
|
|
||||||
self.augroup =
|
|
||||||
api.nvim_create_augroup("avante_sidebar_" .. self.id .. self.containers.result.winid, { clear = true })
|
|
||||||
|
|
||||||
self.containers.result:on(event.BufWinEnter, function()
|
self.containers.result:on(event.BufWinEnter, function()
|
||||||
xpcall(function() api.nvim_buf_set_name(self.containers.result.bufnr, RESULT_BUF_NAME) end, function(_) end)
|
xpcall(function() api.nvim_buf_set_name(self.containers.result.bufnr, RESULT_BUF_NAME) end, function(_) end)
|
||||||
end)
|
end)
|
||||||
|
|||||||
Reference in New Issue
Block a user