aboutsummaryrefslogtreecommitdiff
path: root/runtime/doc
diff options
context:
space:
mode:
authorSean Dewar <seandewar@users.noreply.github.com>2024-02-11 22:53:37 +0000
committerSean Dewar <6256228+seandewar@users.noreply.github.com>2024-03-08 23:24:04 +0000
commita70eae57bd44208a77b5ac29839e8a39ab3c9cd8 (patch)
tree3dcb9475b8ffb425b42d5497063c22bd700217f8 /runtime/doc
parentb1577d371a6db43222de9e3a525def82320ebdb1 (diff)
downloadrneovim-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/doc')
-rw-r--r--runtime/doc/api.txt6
1 files changed, 3 insertions, 3 deletions
diff --git a/runtime/doc/api.txt b/runtime/doc/api.txt
index 125976342b..adaf66c2d9 100644
--- a/runtime/doc/api.txt
+++ b/runtime/doc/api.txt
@@ -3265,9 +3265,9 @@ nvim_open_win({buffer}, {enter}, {config}) *nvim_open_win()*
• 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.