diff options
author | Luuk van Baal <luukvbaal@gmail.com> | 2023-05-24 20:13:11 +0200 |
---|---|---|
committer | Luuk van Baal <luukvbaal@gmail.com> | 2023-05-25 11:24:19 +0200 |
commit | ad7cded1f3f40912d962796d6965dac17ecb97f0 (patch) | |
tree | 9980fbf404ff37edbbfcf9822f6fc8d66ff21387 | |
parent | bff67c9fbe8c174dae8952a565a110930dc4fc58 (diff) | |
download | rneovim-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.c | 7 | ||||
-rw-r--r-- | src/nvim/edit.c | 9 | ||||
-rw-r--r-- | src/nvim/spell.c | 14 | ||||
-rw-r--r-- | test/functional/ui/spell_spec.lua | 12 | ||||
-rw-r--r-- | test/old/testdir/test_spell.vim | 4 |
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') |