]> granicus.if.org Git - vim/commitdiff
patch 8.0.1482: using feedkeys() does not work to test completion v8.0.1482
authorBram Moolenaar <Bram@vim.org>
Fri, 9 Feb 2018 14:06:02 +0000 (15:06 +0100)
committerBram Moolenaar <Bram@vim.org>
Fri, 9 Feb 2018 14:06:02 +0000 (15:06 +0100)
Problem:    Using feedkeys() does not work to test Insert mode completion.
            (Lifepillar)
Solution:   Do not check for typed keys when executing :normal or feedkeys().
            Fix thesaurus completion not working when 'complete' is empty.

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

index 863f1cb68d310262ad3779ac8b5febb5ff3adbc4..fa1d84bbc7a685f42c26e90f2631cfcf8dfb5a2f 100644 (file)
@@ -1454,7 +1454,8 @@ doESCkey:
            /* if 'complete' is empty then plain ^P is no longer special,
             * but it is under other ^X modes */
            if (*curbuf->b_p_cpt == NUL
-                   && ctrl_x_mode != 0
+                   && (ctrl_x_mode == CTRL_X_NORMAL
+                       || ctrl_x_mode == CTRL_X_WHOLE_LINE)
                    && !(compl_cont_status & CONT_LOCAL))
                goto normalchar;
 
@@ -1568,8 +1569,8 @@ normalchar:
        /* If typed something may trigger CursorHoldI again. */
        if (c != K_CURSORHOLD
 # ifdef FEAT_COMPL_FUNC
-           /* but not in CTRL-X mode, a script can't restore the state */
-           && ctrl_x_mode == 0
+               /* but not in CTRL-X mode, a script can't restore the state */
+               && ctrl_x_mode == CTRL_X_NORMAL
 # endif
               )
            did_cursorhold = FALSE;
@@ -1582,7 +1583,7 @@ normalchar:
 #ifdef FEAT_CINDENT
        if (can_cindent && cindent_on()
 # ifdef FEAT_INS_EXPAND
-               && ctrl_x_mode == 0
+               && ctrl_x_mode == CTRL_X_NORMAL
 # endif
           )
        {
@@ -5020,12 +5021,12 @@ ins_compl_next(
 ins_compl_check_keys(int frequency, int in_compl_func)
 {
     static int count = 0;
+    int                c;
 
-    int            c;
-
-    /* Don't check when reading keys from a script.  That would break the test
-     * scripts */
-    if (using_script())
+    /* Don't check when reading keys from a script, :normal or feedkeys().
+     * That would break the test scripts.  But do check for keys when called
+     * from complete_check(). */
+    if (!in_compl_func && (using_script() || ex_normal_busy))
        return;
 
     /* Only do this at regular intervals */
index f857516e88f764ad6fe1d003aac22033b3ed33fb..7278bcd85d14c9b7e070159c4f5451361e85ce81 100644 (file)
@@ -631,11 +631,11 @@ func! Test_edit_CTRL_L()
   call feedkeys("cct\<c-x>\<c-l>\<c-n>\<esc>", 'tnix')
   call assert_equal(['one', 'two', 'three', 't', '', '', ''], getline(1, '$'))
   call feedkeys("cct\<c-x>\<c-l>\<c-n>\<c-n>\<esc>", 'tnix')
-  call assert_equal(['one', 'two', 'three', 't', '', '', ''], getline(1, '$'))
-  call feedkeys("cct\<c-x>\<c-l>\<c-n>\<c-n>\<c-n>\<esc>", 'tnix')
   call assert_equal(['one', 'two', 'three', 'two', '', '', ''], getline(1, '$'))
-  call feedkeys("cct\<c-x>\<c-l>\<c-n>\<c-n>\<c-n>\<c-n>\<esc>", 'tnix')
+  call feedkeys("cct\<c-x>\<c-l>\<c-n>\<c-n>\<c-n>\<esc>", 'tnix')
   call assert_equal(['one', 'two', 'three', 'three', '', '', ''], getline(1, '$'))
+  call feedkeys("cct\<c-x>\<c-l>\<c-n>\<c-n>\<c-n>\<c-n>\<esc>", 'tnix')
+  call assert_equal(['one', 'two', 'three', 't', '', '', ''], getline(1, '$'))
   call feedkeys("cct\<c-x>\<c-l>\<c-p>\<esc>", 'tnix')
   call assert_equal(['one', 'two', 'three', 'two', '', '', ''], getline(1, '$'))
   call feedkeys("cct\<c-x>\<c-l>\<c-p>\<c-p>\<esc>", 'tnix')
@@ -1357,7 +1357,6 @@ func Test_edit_complete_very_long_name()
   let save_columns = &columns
   " Need at least about 1100 columns to reproduce the problem.
   set columns=2000
-  call assert_equal(2000, &columns)
   set noswapfile
 
   let longfilename = longdirname . '/' . repeat('a', 255)
index e57782fb8793eacb81fee9e1d3c14f654c9e3de4..652b1d9e4213055d2dd1ddeaf542cb15b89a4223 100644 (file)
@@ -116,3 +116,14 @@ func Test_omni_dash()
   delfunc Omni
   set omnifunc=
 endfunc
+
+" Check that when using feedkeys() typeahead does not interrupt searching for
+" completions.
+func Test_compl_feedkeys()
+  new
+  set completeopt=menuone,noselect
+  call feedkeys("ajump ju\<C-X>\<C-N>\<C-P>\<ESC>", "tx")
+  call assert_equal("jump jump", getline(1))
+  bwipe!
+  set completeopt&
+endfunc
index 6250c1b8f2fd9fc2f4379a95a88ea47c3b9cf61e..d121affc7d71124ec88a2f937635fa1ce2877d4c 100644 (file)
@@ -693,7 +693,7 @@ func Test_popup_and_preview_autocommand()
   norm! gt
   call assert_equal(0, &previewwindow)
   norm! gT
-  call assert_equal(12, tabpagenr('$'))
+  call assert_equal(10, tabpagenr('$'))
   tabonly
   pclose
   augroup MyBufAdd
index 0e282ab4f8329c1c3f6247d7516aa33dbd45e9b0..5285565871ebe6f772674bf0a3726167213c582b 100644 (file)
@@ -771,6 +771,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1482,
 /**/
     1481,
 /**/