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 /src | |
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>
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/drawline.c | 7 | ||||
-rw-r--r-- | src/nvim/edit.c | 9 | ||||
-rw-r--r-- | src/nvim/spell.c | 14 |
3 files changed, 21 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; } |