mirror of
https://github.com/neovim/neovim.git
synced 2025-10-21 17:21:49 +00:00
fix(api): make open_win block only enter/leave events if !enter && !noautocmd
Problem: nvim_open_win blocking all win_set_buf autocommands when !enter && !noautocmd is too aggressive. Solution: temporarily block WinEnter/Leave and BufEnter/Leave events when setting the buffer. Delegate the firing of BufWinEnter back to win_set_buf, which also has the advantage of keeping the timing consistent (e.g: before the epilogue in enter_buffer, which also handles restoring the cursor position if autocommands didn't change it, among other things). Reword the documentation for noautocmd a bit. I pondered modifying do_buffer and callees to allow for BufEnter/Leave being conditionally disabled, but it seems too invasive (and potentially error-prone, especially if new code paths to BufEnter/Leave are added in the future). Unfortunately, doing this has the drawback of blocking ALL such events for the duration, which also means blocking unrelated such events; like if window switching occurs in a ++nested autocmd fired by win_set_buf. If this turns out to be a problem in practice, a different solution specialized for nvim_open_win could be considered. :-)
This commit is contained in:
6
runtime/lua/vim/_meta/api.lua
generated
6
runtime/lua/vim/_meta/api.lua
generated
@@ -1719,9 +1719,9 @@ function vim.api.nvim_open_term(buffer, opts) end
|
||||
--- • footer_pos: Footer position. Must be set with `footer`
|
||||
--- option. Value can be one of "left", "center", or "right".
|
||||
--- Default is `"left"`.
|
||||
--- • noautocmd: If true then no buffer-related autocommand
|
||||
--- events such as `BufEnter`, `BufLeave` or `BufWinEnter` may
|
||||
--- fire from calling this function.
|
||||
--- • noautocmd: If true then autocommands triggered from
|
||||
--- setting the `buffer` to display are blocked (e.g:
|
||||
--- `BufEnter`, `BufLeave`, `BufWinEnter`).
|
||||
--- • fixed: If true when anchor is NW or SW, the float window
|
||||
--- would be kept fixed even if the window would be truncated.
|
||||
--- • hide: If true the floating window will be hidden.
|
||||
|
Reference in New Issue
Block a user