mirror of
https://github.com/vim/vim.git
synced 2025-09-26 04:04:07 -04:00
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.
This commit is contained in:
@@ -1125,10 +1125,7 @@ win_line(
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef FEAT_SPELL
|
#ifdef FEAT_SPELL
|
||||||
if (wp->w_p_spell
|
if (spell_check_window(wp))
|
||||||
&& *wp->w_s->b_p_spl != NUL
|
|
||||||
&& wp->w_s->b_langp.ga_len > 0
|
|
||||||
&& *(char **)(wp->w_s->b_langp.ga_data) != NULL)
|
|
||||||
{
|
{
|
||||||
// Prepare for spell checking.
|
// Prepare for spell checking.
|
||||||
has_spell = TRUE;
|
has_spell = TRUE;
|
||||||
|
@@ -3587,6 +3587,13 @@ ins_esc(
|
|||||||
|
|
||||||
#ifdef FEAT_SPELL
|
#ifdef FEAT_SPELL
|
||||||
check_spell_redraw();
|
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);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
temp = curwin->w_cursor.col;
|
temp = curwin->w_cursor.col;
|
||||||
|
@@ -5,6 +5,7 @@ int can_compound(slang_T *slang, char_u *word, char_u *flags);
|
|||||||
int match_compoundrule(slang_T *slang, char_u *compflags);
|
int match_compoundrule(slang_T *slang, char_u *compflags);
|
||||||
int valid_word_prefix(int totprefcnt, int arridx, int flags, char_u *word, slang_T *slang, int cond_req);
|
int valid_word_prefix(int totprefcnt, int arridx, int flags, char_u *word, slang_T *slang, int cond_req);
|
||||||
int spell_valid_case(int wordflags, int treeflags);
|
int spell_valid_case(int wordflags, int treeflags);
|
||||||
|
int spell_check_window(win_T *wp);
|
||||||
int spell_move_to(win_T *wp, int dir, int allwords, int curline, hlf_T *attrp);
|
int spell_move_to(win_T *wp, int dir, int allwords, int curline, hlf_T *attrp);
|
||||||
void spell_cat_line(char_u *buf, char_u *line, int maxlen);
|
void spell_cat_line(char_u *buf, char_u *line, int maxlen);
|
||||||
char_u *spell_enc(void);
|
char_u *spell_enc(void);
|
||||||
|
21
src/spell.c
21
src/spell.c
@@ -1238,18 +1238,27 @@ spell_valid_case(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return TRUE if spell checking is not enabled.
|
* Return TRUE if spell checking is enabled for "wp".
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
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.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
no_spell_checking(win_T *wp)
|
no_spell_checking(win_T *wp)
|
||||||
{
|
{
|
||||||
if (!wp->w_p_spell || *wp->w_s->b_p_spl == NUL
|
if (spell_check_window(wp))
|
||||||
|| wp->w_s->b_langp.ga_len == 0)
|
return FALSE;
|
||||||
{
|
|
||||||
emsg(_(e_spell_checking_is_not_possible));
|
emsg(_(e_spell_checking_is_not_possible));
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
|
||||||
return FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
8
src/testdir/dumps/Test_spell_3.dump
Normal file
8
src/testdir/dumps/Test_spell_3.dump
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
| +0&#ffffff0@2|T|h|i|s| |l|i|n|e| |h|a|s| |a| |s+0&#ffd7d7255|e|p|l@1| +0&#ffffff0|e|r@1|o|r|.| |a+0fd7ff255|n|d| +0&#ffffff0|m|i|s@1|i|n|g| |c|a|p|s| |a|n|d| |t|r|a|i|l|i|n|g| |s|p|a|c|e|s|.| @5
|
||||||
|
|a+0fd7ff255|n|o|t|h|e|r| +0&#ffffff0|m|i|s@1|i|n|g| |c|a|p| |h|e|r|e|.| @49
|
||||||
|
|N|o>t| @71
|
||||||
|
|a|n|d| |h|e|r|e|.| @65
|
||||||
|
@75
|
||||||
|
|a+0fd7ff255|n|d| +0&#ffffff0|h|e|r|e|.| @65
|
||||||
|
|~+0#4040ff13&| @73
|
||||||
|
| +0#0000000&@56|3|,|3| @10|A|l@1|
|
@@ -983,6 +983,10 @@ func Test_spell_screendump_spellcap()
|
|||||||
let buf = RunVimInTerminal('-S XtestSpellCap', {'rows': 8})
|
let buf = RunVimInTerminal('-S XtestSpellCap', {'rows': 8})
|
||||||
call VerifyScreenDump(buf, 'Test_spell_2', {})
|
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
|
" clean up
|
||||||
call StopVimInTerminal(buf)
|
call StopVimInTerminal(buf)
|
||||||
call delete('XtestSpellCap')
|
call delete('XtestSpellCap')
|
||||||
|
@@ -699,6 +699,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
590,
|
||||||
/**/
|
/**/
|
||||||
589,
|
589,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user