fix(ui): doesn't trigger au event when enter is false

This commit is contained in:
glepnir 2023-09-10 15:09:20 +08:00
parent 82150ca51b
commit a916523574
2 changed files with 42 additions and 1 deletions

View File

@ -190,7 +190,8 @@ Window nvim_open_win(Buffer buffer, Boolean enter, Dict(float_config) *config, E
} }
// autocmds in win_enter or win_set_buf below may close the window // autocmds in win_enter or win_set_buf below may close the window
if (win_valid(wp) && buffer > 0) { if (win_valid(wp) && buffer > 0) {
win_set_buf(wp, buf, fconfig.noautocmd, err); Boolean noautocmd = !enter || fconfig.noautocmd;
win_set_buf(wp, buf, noautocmd, err);
} }
if (!win_valid(wp)) { if (!win_valid(wp)) {
api_set_error(err, kErrorTypeException, "Window was closed immediately"); api_set_error(err, kErrorTypeException, "Window was closed immediately");

View File

@ -415,6 +415,46 @@ describe('float window', function()
eq(winids, eval('winids')) eq(winids, eval('winids'))
end) end)
it("open does not trigger BufEnter #15300", function()
local res = exec_lua[[
local times = {}
local buf = vim.api.nvim_create_buf(fasle, true)
vim.api.nvim_create_autocmd('BufEnter', {
callback = function(opt)
if opt.buf == buf then
times[#times + 1] = 1
end
end
})
local win_id
local fconfig = {
relative = 'editor',
row = 10,
col = 10,
width = 10,
height = 10,
}
--enter is false doesn't trigger
win_id = vim.api.nvim_open_win(buf, false, fconfig)
vim.api.nvim_win_close(win_id, true)
times[#times + 1] = #times == 0 and true or nil
--enter is true trigger
win_id = vim.api.nvim_open_win(buf, true, fconfig)
vim.api.nvim_win_close(win_id, true)
times[#times + 1] = #times == 2 and true or nil
--enter is true and fconfig.noautocmd is true doesn't trigger
fconfig.noautocmd = true
win_id = vim.api.nvim_open_win(buf, true, fconfig)
vim.api.nvim_win_close(win_id, true)
times[#times + 1] = #times == 2 and true or nil
return times
]]
eq({true, 1, true}, res)
end)
it('no crash with bufpos and non-existent window', function() it('no crash with bufpos and non-existent window', function()
command('new') command('new')
local closed_win = meths.get_current_win().id local closed_win = meths.get_current_win().id