]> granicus.if.org Git - vim/commitdiff
patch 8.0.0669: CTRL-N at start of the buffer does not work correctly v8.0.0669
authorBram Moolenaar <Bram@vim.org>
Sat, 24 Jun 2017 13:39:07 +0000 (15:39 +0200)
committerBram Moolenaar <Bram@vim.org>
Sat, 24 Jun 2017 13:39:07 +0000 (15:39 +0200)
Problem:    In Insert mode, CTRL-N at start of the buffer does not work
            correctly. (zuloloxi)
Solution:   Wrap around the start of the buffer. (Christian Brabandt)

src/edit.c
src/testdir/test_popup.vim
src/version.c

index da1b238d878aba684a733ec837acef25cc3d2838..912f05f38904eeafcee6d4cacc500ea8d40664c1 100644 (file)
@@ -4308,9 +4308,17 @@ ins_compl_get_exp(pos_T *ini)
            {
                ins_buf = curbuf;
                first_match_pos = *ini;
-               /* So that ^N can match word immediately after cursor */
-               if (ctrl_x_mode == 0)
-                   dec(&first_match_pos);
+               /* Move the cursor back one character so that ^N can match the
+                * word immediately after the cursor. */
+               if (ctrl_x_mode == 0 && dec(&first_match_pos) < 0)
+               {
+                   /* Move the cursor to after the last character in the
+                    * buffer, so that word at start of buffer is found
+                    * correctly. */
+                   first_match_pos.lnum = ins_buf->b_ml.ml_line_count;
+                   first_match_pos.col =
+                                (colnr_T)STRLEN(ml_get(first_match_pos.lnum));
+               }
                last_match_pos = first_match_pos;
                type = 0;
 
index 25d766f7b9d037dfb0d54ac77a7cc366467999ab..e3bd0e19a07b0ce02d7e0663c8119a3adacedc0f 100644 (file)
@@ -612,5 +612,19 @@ func Test_complete_func_mess()
   set completefunc=
 endfunc
 
+func Test_complete_CTRLN_startofbuffer()
+  new
+  call setline(1, [ 'organize(cupboard, 3, 2);',
+        \ 'prioritize(bureau, 8, 7);',
+        \ 'realize(bannister, 4, 4);',
+        \ 'moralize(railing, 3,9);'])
+  let expected=['cupboard.organize(3, 2);',
+        \ 'bureau.prioritize(8, 7);',
+        \ 'bannister.realize(4, 4);',
+        \ 'railing.moralize(3,9);']
+  call feedkeys("qai\<c-n>\<c-n>.\<esc>3wdW\<cr>q3@a", 'tx')
+  call assert_equal(expected, getline(1,'$'))
+  bwipe!
+endfunc
 
 " vim: shiftwidth=2 sts=2 expandtab
index eda74a207d9b5adfcbd6e225abb9579b53fdad22..d1c6119a19d7ef014a2b75500ed898a6a498ac00 100644 (file)
@@ -764,6 +764,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    669,
 /**/
     668,
 /**/