aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuuk van Baal <luukvbaal@gmail.com>2023-05-24 20:13:11 +0200
committerLuuk van Baal <luukvbaal@gmail.com>2023-05-25 11:24:19 +0200
commitad7cded1f3f40912d962796d6965dac17ecb97f0 (patch)
tree9980fbf404ff37edbbfcf9822f6fc8d66ff21387
parentbff67c9fbe8c174dae8952a565a110930dc4fc58 (diff)
downloadrneovim-ad7cded1f3f40912d962796d6965dac17ecb97f0.tar.gz
rneovim-ad7cded1f3f40912d962796d6965dac17ecb97f0.tar.bz2
rneovim-ad7cded1f3f40912d962796d6965dac17ecb97f0.zip
vim-patch:9.0.0590: after exiting Insert mode spelling not checked in next line
Problem: After exiting Insert mode spelling is not checked in the next line. Solution: When spelling is enabled redraw the next line after exiting Insert mode in case the spell highlight needs updating. https://github.com/vim/vim/commit/ee09fcc9b6cf24e02899461809da9a5148208ea5 Co-authored-by: Bram Moolenaar <Bram@vim.org>
-rw-r--r--src/nvim/drawline.c7
-rw-r--r--src/nvim/edit.c9
-rw-r--r--src/nvim/spell.c14
-rw-r--r--test/functional/ui/spell_spec.lua12
-rw-r--r--test/old/testdir/test_spell.vim4
5 files changed, 37 insertions, 9 deletions
diff --git a/src/nvim/drawline.c b/src/nvim/drawline.c
index a49b2ac6d6..54da38a6ff 100644
--- a/src/nvim/drawline.c
+++ b/src/nvim/drawline.c
@@ -1203,12 +1203,7 @@ int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, bool nochange,
draw_color_col = advance_color_col(VCOL_HLC, &color_cols);
}
- if (wp->w_p_spell
- && !has_fold
- && !end_fill
- && *wp->w_s->b_p_spl != NUL
- && !GA_EMPTY(&wp->w_s->b_langp)
- && *(char **)(wp->w_s->b_langp.ga_data) != NULL) {
+ if (!has_fold && !end_fill && spell_check_window(wp)) {
// Prepare for spell checking.
has_spell = true;
extra_check = true;
diff --git a/src/nvim/edit.c b/src/nvim/edit.c
index a25387f5a6..612a1a1bda 100644
--- a/src/nvim/edit.c
+++ b/src/nvim/edit.c
@@ -53,6 +53,7 @@
#include "nvim/popupmenu.h"
#include "nvim/pos.h"
#include "nvim/search.h"
+#include "nvim/spell.h"
#include "nvim/state.h"
#include "nvim/strings.h"
#include "nvim/syntax.h"
@@ -3394,6 +3395,14 @@ static bool ins_esc(long *count, int cmdchar, bool nomove)
check_spell_redraw();
+ // When text has been changed in this line, possibly the start of the next
+ // line may have SpellCap that should be removed or it needs to be
+ // displayed. Schedule the next line for redrawing just in case.
+ if (spell_check_window(curwin)
+ && curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count) {
+ redrawWinline(curwin, curwin->w_cursor.lnum + 1);
+ }
+
int temp = curwin->w_cursor.col;
if (disabled_redraw) {
RedrawingDisabled--;
diff --git a/src/nvim/spell.c b/src/nvim/spell.c
index 84875261f1..498bd56b9e 100644
--- a/src/nvim/spell.c
+++ b/src/nvim/spell.c
@@ -1189,11 +1189,19 @@ bool spell_valid_case(int wordflags, int treeflags)
|| (wordflags & WF_ONECAP) != 0));
}
-// Returns true if spell checking is not enabled.
+/// Return true if spell checking is enabled for "wp".
+bool spell_check_window(win_T *wp)
+{
+ return wp->w_p_spell
+ && *wp->w_s->b_p_spl != NUL
+ && wp->w_s->b_langp.ga_len > 0
+ && *(char **)(wp->w_s->b_langp.ga_data) != NULL;
+}
+
+/// Return true and give an error if spell checking is not enabled.
bool no_spell_checking(win_T *wp)
{
- if (!wp->w_p_spell || *wp->w_s->b_p_spl == NUL
- || GA_EMPTY(&wp->w_s->b_langp)) {
+ if (!wp->w_p_spell || *wp->w_s->b_p_spl == NUL || GA_EMPTY(&wp->w_s->b_langp)) {
emsg(_(e_no_spell));
return true;
}
diff --git a/test/functional/ui/spell_spec.lua b/test/functional/ui/spell_spec.lua
index c5c4ec3b99..5cfb85e431 100644
--- a/test/functional/ui/spell_spec.lua
+++ b/test/functional/ui/spell_spec.lua
@@ -103,6 +103,18 @@ describe("'spell'", function()
{0:~ }|
|
]])
+ -- After adding word missing Cap in next line is updated
+ feed('3GANot<Esc>')
+ screen:expect([[
+ This line has a {1:sepll} error. {2:and} missing caps and trailing spaces. |
+ {2:another} missing cap here. |
+ No^t |
+ and here. |
+ |
+ {2:and} here. |
+ {0:~ }|
+ |
+ ]])
end)
it('extmarks, "noplainbuffer" and syntax #20385 #23398', function()
diff --git a/test/old/testdir/test_spell.vim b/test/old/testdir/test_spell.vim
index 1d122d7726..15c47881a9 100644
--- a/test/old/testdir/test_spell.vim
+++ b/test/old/testdir/test_spell.vim
@@ -1014,6 +1014,10 @@ func Test_spell_screendump_spellcap()
let buf = RunVimInTerminal('-S XtestSpellCap', {'rows': 8})
call VerifyScreenDump(buf, 'Test_spell_2', {})
+ " After adding word missing Cap in next line is updated
+ call term_sendkeys(buf, "3GANot\<Esc>")
+ call VerifyScreenDump(buf, 'Test_spell_3', {})
+
" clean up
call StopVimInTerminal(buf)
call delete('XtestSpellCap')