From 74751117eb88f584bd61f6f2a85758bcfd41fe43 Mon Sep 17 00:00:00 2001 From: Björn Linse Date: Wed, 8 May 2019 20:30:30 +0200 Subject: autocmd: fixes and tests for autocmd window issues - redraw! in an invisible buffer rendered the screen unusable. - storing the autocmd window handle and using it in API function could lead to crashes. Unregister the handle when the window is not active. --- src/nvim/fileio.c | 11 +++++++++++ src/nvim/window.c | 4 ++-- 2 files changed, 13 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/nvim/fileio.c b/src/nvim/fileio.c index 717ae6e602..507bf3c032 100644 --- a/src/nvim/fileio.c +++ b/src/nvim/fileio.c @@ -11,6 +11,7 @@ #include #include "nvim/vim.h" +#include "nvim/api/private/handle.h" #include "nvim/ascii.h" #include "nvim/fileio.h" #include "nvim/buffer.h" @@ -47,6 +48,7 @@ #include "nvim/state.h" #include "nvim/strings.h" #include "nvim/ui.h" +#include "nvim/ui_compositor.h" #include "nvim/types.h" #include "nvim/undo.h" #include "nvim/window.h" @@ -6586,6 +6588,8 @@ void aucmd_prepbuf(aco_save_T *aco, buf_T *buf) block_autocmds(); // We don't want BufEnter/WinEnter autocommands. if (need_append) { win_append(lastwin, aucmd_win); + handle_register_window(aucmd_win); + win_config_float(aucmd_win, aucmd_win->w_float_config); } // Prevent chdir() call in win_enter_ext(), through do_autochdir() int save_acd = p_acd; @@ -6625,6 +6629,13 @@ void aucmd_restbuf(aco_save_T *aco) win_found: win_remove(curwin, NULL); + handle_unregister_window(curwin); + if (curwin->w_grid.chars != NULL) { + ui_comp_remove_grid(&curwin->w_grid); + ui_call_win_hide(curwin->w_grid.handle); + grid_free(&curwin->w_grid); + } + aucmd_win_used = false; last_status(false); // may need to remove last status line diff --git a/src/nvim/window.c b/src/nvim/window.c index 200c651d1e..6bc082ffb2 100644 --- a/src/nvim/window.c +++ b/src/nvim/window.c @@ -3418,8 +3418,8 @@ void win_alloc_aucmd_win(void) { Error err = ERROR_INIT; FloatConfig fconfig = FLOAT_CONFIG_INIT; - fconfig.width = 20; - fconfig.height = 20; + fconfig.width = Columns; + fconfig.height = 5; fconfig.focusable = false; aucmd_win = win_new_float(NULL, fconfig, &err); aucmd_win->w_buffer->b_nwindows--; -- cgit