changeset 16287:a6cffc232b9d v8.1.1148

patch 8.1.1148: CTRL-L with 'incsearch' does not pick up char under cursor commit https://github.com/vim/vim/commit/730f48fe3691dc62331f3df23cb947bfc33a5add Author: Bram Moolenaar <Bram@vim.org> Date: Thu Apr 11 13:45:57 2019 +0200 patch 8.1.1148: CTRL-L with 'incsearch' does not pick up char under cursor Problem: CTRL-L with 'incsearch' does not pick up char under cursor. (Smylers) Solution: Do not compare the position with the cursor position. (Hirohito Higashi, closes #3620)
author Bram Moolenaar <Bram@vim.org>
date Thu, 11 Apr 2019 14:00:05 +0200
parents a7c48660b263
children 199cef46e9f9
files src/ex_getln.c src/testdir/test_search.vim src/version.c
diffstat 3 files changed, 38 insertions(+), 23 deletions(-) [+]
line wrap: on
line diff
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -745,39 +745,35 @@ may_add_char_to_search(int firstc, int *
     if (is_state->did_incsearch)
     {
 	curwin->w_cursor = is_state->match_end;
-	if (!EQUAL_POS(curwin->w_cursor, is_state->search_start))
+	*c = gchar_cursor();
+	if (*c != NUL)
 	{
-	    *c = gchar_cursor();
-
 	    // If 'ignorecase' and 'smartcase' are set and the
 	    // command line has no uppercase characters, convert
 	    // the character to lowercase.
 	    if (p_ic && p_scs && !pat_has_uppercase(ccline.cmdbuff + skiplen))
 		*c = MB_TOLOWER(*c);
-	    if (*c != NUL)
+	    if (*c == firstc || vim_strchr((char_u *)(
+			       p_magic ? "\\~^$.*[" : "\\^$"), *c) != NULL)
 	    {
-		if (*c == firstc || vim_strchr((char_u *)(
-				   p_magic ? "\\~^$.*[" : "\\^$"), *c) != NULL)
-		{
-		    // put a backslash before special characters
-		    stuffcharReadbuff(*c);
-		    *c = '\\';
-		}
-		// add any composing characters
-		if (mb_char2len(*c) != mb_ptr2len(ml_get_cursor()))
+		// put a backslash before special characters
+		stuffcharReadbuff(*c);
+		*c = '\\';
+	    }
+	    // add any composing characters
+	    if (mb_char2len(*c) != mb_ptr2len(ml_get_cursor()))
+	    {
+		int save_c = *c;
+
+		while (mb_char2len(*c) != mb_ptr2len(ml_get_cursor()))
 		{
-		    int save_c = *c;
-
-		    while (mb_char2len(*c) != mb_ptr2len(ml_get_cursor()))
-		    {
-			curwin->w_cursor.col += mb_char2len(*c);
-			*c = gchar_cursor();
-			stuffcharReadbuff(*c);
-		    }
-		    *c = save_c;
+		    curwin->w_cursor.col += mb_char2len(*c);
+		    *c = gchar_cursor();
+		    stuffcharReadbuff(*c);
 		}
-		return FAIL;
+		*c = save_c;
 	    }
+	    return FAIL;
 	}
     }
     return OK;
--- a/src/testdir/test_search.vim
+++ b/src/testdir/test_search.vim
@@ -1248,3 +1248,20 @@ func Test_one_error_msg()
   " This  was also giving an internal error
   call assert_fails('call search(" \\((\\v[[=P=]]){185}+             ")', 'E871:')
 endfunc
+
+func Test_incsearch_add_char_under_cursor()
+  if !exists('+incsearch')
+    return
+  endif
+  set incsearch
+  new
+  call setline(1, ['find match', 'anything'])
+  1
+  call test_override('char_avail', 1)
+  call feedkeys("fc/m\<C-L>\<C-L>\<C-L>\<C-L>\<C-L>\<CR>", 'tx')
+  call assert_equal('match', @/)
+  call test_override('char_avail', 0)
+
+  set incsearch&
+  bwipe!
+endfunc
--- a/src/version.c
+++ b/src/version.c
@@ -772,6 +772,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1148,
+/**/
     1147,
 /**/
     1146,