]> granicus.if.org Git - vim/commitdiff
patch 9.0.0608: with spelling, deleting a full stop does not update next line v9.0.0608
authorBram Moolenaar <Bram@vim.org>
Tue, 27 Sep 2022 15:29:38 +0000 (16:29 +0100)
committerBram Moolenaar <Bram@vim.org>
Tue, 27 Sep 2022 15:29:38 +0000 (16:29 +0100)
Problem:    With spell checking, deleting a full stop at the end of a line
            does not update SpellCap at the start of the next line.
Solution:   Update the next line when characters have been deleted.  Also when
            using undo.

src/change.c
src/edit.c
src/testdir/dumps/Test_spell_4.dump [new file with mode: 0644]
src/testdir/dumps/Test_spell_5.dump [new file with mode: 0644]
src/testdir/test_spell.vim
src/undo.c
src/version.c

index 038f3c199fc6541af5dc6de7ed1d84f266a1127c..67b70230a1adbb02b8604cc2de620ea1d04007d4 100644 (file)
@@ -709,6 +709,13 @@ changed_bytes(linenr_T lnum, colnr_T col)
     changedOneline(curbuf, lnum);
     changed_common(lnum, col, lnum + 1, 0L);
 
+#ifdef FEAT_SPELL
+    // When text has been changed at the end of the 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) && lnum < curbuf->b_ml.ml_line_count)
+       redrawWinline(curwin, lnum + 1);
+#endif
 #ifdef FEAT_DIFF
     // Diff highlighting in other diff windows may need to be updated too.
     if (curwin->w_p_diff)
index 2ac544a6be9a7bbf1e006a8a205d4fab66c589cd..447996459146ec9e0d97a27b7ccd363009f03483 100644 (file)
@@ -3607,13 +3607,6 @@ ins_esc(
 
 #ifdef FEAT_SPELL
     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
 
     temp = curwin->w_cursor.col;
diff --git a/src/testdir/dumps/Test_spell_4.dump b/src/testdir/dumps/Test_spell_4.dump
new file mode 100644 (file)
index 0000000..c49dc84
--- /dev/null
@@ -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+0&#5fd7ff255|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+0&#5fd7ff255|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| @66
+|a|n|d| |h|e|r|e|.| @65
+|~+0#4040ff13&| @73
+|~| @73
+| +0#0000000&@56|4|,|8| @10|A|l@1| 
diff --git a/src/testdir/dumps/Test_spell_5.dump b/src/testdir/dumps/Test_spell_5.dump
new file mode 100644 (file)
index 0000000..a23ce5c
--- /dev/null
@@ -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+0&#5fd7ff255|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+0&#5fd7ff255|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
+|a+0&#5fd7ff255|n|d| +0&#ffffff0|h|e|r|e|.| @65
+|~+0#4040ff13&| @73
+|~| @73
+| +0#0000000&@56|4|,|9| @10|A|l@1| 
index 90c6d53ced3ec65291d535a4c892160ce1a8796b..3712b540672eb31d17320342051936578f3e4fef 100644 (file)
@@ -987,6 +987,14 @@ func Test_spell_screendump_spellcap()
   call term_sendkeys(buf, "3GANot\<Esc>")
   call VerifyScreenDump(buf, 'Test_spell_3', {})
 
+  " Deleting a full stop removes missing Cap in next line
+  call term_sendkeys(buf, "5Gddk$x")
+  call VerifyScreenDump(buf, 'Test_spell_4', {})
+
+  " Undo also updates the next line (go to command line to remove message)
+  call term_sendkeys(buf, "u:\<Esc>")
+  call VerifyScreenDump(buf, 'Test_spell_5', {})
+
   " clean up
   call StopVimInTerminal(buf)
   call delete('XtestSpellCap')
index 3b354528aede102fcd39ec3945745d0d74ade390..60172a731247d6c79f443e705699527d82d8f2a4 100644 (file)
@@ -2835,7 +2835,16 @@ u_undoredo(int undo)
                curbuf->b_op_end.lnum += newsize - oldsize;
        }
        if (oldsize > 0 || newsize > 0)
+       {
            changed_lines(top + 1, 0, bot, newsize - oldsize);
+#ifdef FEAT_SPELL
+           // When text has been changed, 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) && bot <= curbuf->b_ml.ml_line_count)
+               redrawWinline(curwin, bot);
+#endif
+       }
 
        // Set the '[ mark.
        if (top + 1 < curbuf->b_op_start.lnum)
index 8e438af3c86408b87155084d6cd380bcfbfa9b5e..ea6f9d39200a9e8a5e72fbefef6110f97241aead 100644 (file)
@@ -699,6 +699,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    608,
 /**/
     607,
 /**/