diff options
author | Sean Dewar <seandewar@users.noreply.github.com> | 2024-02-11 22:53:37 +0000 |
---|---|---|
committer | Sean Dewar <6256228+seandewar@users.noreply.github.com> | 2024-03-08 23:24:04 +0000 |
commit | a70eae57bd44208a77b5ac29839e8a39ab3c9cd8 (patch) | |
tree | 3dcb9475b8ffb425b42d5497063c22bd700217f8 /runtime/lua/vim/_meta/vimfn.lua | |
parent | b1577d371a6db43222de9e3a525def82320ebdb1 (diff) | |
download | rneovim-a70eae57bd44208a77b5ac29839e8a39ab3c9cd8.tar.gz rneovim-a70eae57bd44208a77b5ac29839e8a39ab3c9cd8.tar.bz2 rneovim-a70eae57bd44208a77b5ac29839e8a39ab3c9cd8.zip |
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. :-)
Diffstat (limited to 'runtime/lua/vim/_meta/vimfn.lua')
0 files changed, 0 insertions, 0 deletions