mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 12:27:24 +00:00 
			
		
		
		
	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.
ee09fcc9b6
Co-authored-by: Bram Moolenaar <Bram@vim.org>
			
			
This commit is contained in:
		| @@ -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; | ||||
|   | ||||
| @@ -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--; | ||||
|   | ||||
| @@ -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; | ||||
|   } | ||||
|   | ||||
| @@ -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() | ||||
|   | ||||
| @@ -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') | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Luuk van Baal
					Luuk van Baal