diff options
author | Marco Hinz <mh.codebro+github@gmail.com> | 2019-03-23 00:23:39 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-03-23 00:23:39 +0100 |
commit | 3e78319ac608abadd5204e00295dc3ace7e2edd8 (patch) | |
tree | 59362c15a8559c78a4bf9c0b3b833c684959bb7d | |
parent | 3edf7fc64f6735a283af2c6cf728b28179bcb582 (diff) | |
download | rneovim-3e78319ac608abadd5204e00295dc3ace7e2edd8.tar.gz rneovim-3e78319ac608abadd5204e00295dc3ace7e2edd8.tar.bz2 rneovim-3e78319ac608abadd5204e00295dc3ace7e2edd8.zip |
help: ignore snapshotted window if invalid (#9774)
Nvim doesn't expect a window-changing command on an created-window event.
autocmd WinNew * wincmd p
help help
- A snapshot for window 1000 is created.
- The window is split and the cursor changes to the new window 1001.
- The autocmd kicks in and switches back to 1000.
- The help buffer is opened.
- On closing the help window 1000, it tries to go back to the snapshotted window
which is... 1000.
- wp1000->w_buffer == NULL
- w_buffer is used by check_cursor()
- 🧨 -> 💥
Fixes https://github.com/neovim/neovim/issues/9773
-rw-r--r-- | src/nvim/window.c | 2 | ||||
-rw-r--r-- | test/functional/ex_cmds/help_spec.lua | 27 |
2 files changed, 28 insertions, 1 deletions
diff --git a/src/nvim/window.c b/src/nvim/window.c index e60cfbfb92..f9a0839702 100644 --- a/src/nvim/window.c +++ b/src/nvim/window.c @@ -6062,7 +6062,7 @@ static win_T *get_snapshot_focus(int idx) } } - return sn->fr_win; + return win_valid(sn->fr_win) ? sn->fr_win : NULL; } /* diff --git a/test/functional/ex_cmds/help_spec.lua b/test/functional/ex_cmds/help_spec.lua new file mode 100644 index 0000000000..66d7d7d89f --- /dev/null +++ b/test/functional/ex_cmds/help_spec.lua @@ -0,0 +1,27 @@ +local helpers = require('test.functional.helpers')(after_each) + +local clear = helpers.clear +local command = helpers.command +local eq = helpers.eq +local funcs = helpers.funcs + +describe(':help', function() + before_each(clear) + + it('window closed makes cursor return to a valid win/buf #9773', function() + command('help help') + eq(1001, funcs.win_getid()) + command('quit') + eq(1000, funcs.win_getid()) + + command('autocmd WinNew * wincmd p') + + command('help help') + -- Window 1002 is opened, but the autocmd switches back to 1000 and + -- creates the help buffer there instead. + eq(1000, funcs.win_getid()) + command('quit') + -- Before #9773, Nvim would crash on quitting the help window. + eq(1002, funcs.win_getid()) + end) +end) |