aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/spell.c5
-rw-r--r--src/nvim/testdir/test_spell.vim13
2 files changed, 16 insertions, 2 deletions
diff --git a/src/nvim/spell.c b/src/nvim/spell.c
index b1daf4ed23..b9ea7557c4 100644
--- a/src/nvim/spell.c
+++ b/src/nvim/spell.c
@@ -110,6 +110,7 @@
#include "nvim/types.h" // for char_u
#include "nvim/undo.h" // for u_save_cursor
#include "nvim/vim.h" // for curwin, strlen, STRLCPY, STRNCMP
+#include "nvim/window.h" // for win_valid_any_tab
// Result values. Lower number is accepted over higher one.
enum {
@@ -1965,8 +1966,8 @@ char *did_set_spelllang(win_T *wp)
} else {
spell_load_lang((char_u *)lang);
// SpellFileMissing autocommands may do anything, including
- // destroying the buffer we are using...
- if (!bufref_valid(&bufref)) {
+ // destroying the buffer we are using or closing the window.
+ if (!bufref_valid(&bufref) || !win_valid_any_tab(wp)) {
ret_msg = N_("E797: SpellFileMissing autocommand deleted buffer");
goto theend;
}
diff --git a/src/nvim/testdir/test_spell.vim b/src/nvim/testdir/test_spell.vim
index ea18fc5194..a919156066 100644
--- a/src/nvim/testdir/test_spell.vim
+++ b/src/nvim/testdir/test_spell.vim
@@ -159,6 +159,19 @@ func Test_spell_file_missing()
%bwipe!
endfunc
+func Test_spell_file_missing_bwipe()
+ " this was using a window that was wiped out in a SpellFileMissing autocmd
+ set spelllang=xy
+ au SpellFileMissing * n0
+ set spell
+ au SpellFileMissing * bw
+ snext somefile
+
+ au! SpellFileMissing
+ bwipe!
+ set nospell spelllang=en
+endfunc
+
func Test_spelldump()
" In case the spell file is not found avoid getting the download dialog, we
" would get stuck at the prompt.