summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-04-11 13:45:57 +0200
committerBram Moolenaar <Bram@vim.org>2019-04-11 13:45:57 +0200
commit730f48fe3691dc62331f3df23cb947bfc33a5add (patch)
treecfedff294d2336462fcd0c0db5c56a68673d963a
parenta60e536a290f7c14cf2b255ddb7071b39619fcd3 (diff)
downloadvim-git-730f48fe3691dc62331f3df23cb947bfc33a5add.tar.gz
patch 8.1.1148: CTRL-L with 'incsearch' does not pick up char under cursorv8.1.1148
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)
-rw-r--r--src/ex_getln.c40
-rw-r--r--src/testdir/test_search.vim17
-rw-r--r--src/version.c2
3 files changed, 37 insertions, 22 deletions
diff --git a/src/ex_getln.c b/src/ex_getln.c
index 52eda33c7..e6bb815b4 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -745,39 +745,35 @@ may_add_char_to_search(int firstc, int *c, incsearch_state_T *is_state)
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)
+ {
+ // put a backslash before special characters
+ stuffcharReadbuff(*c);
+ *c = '\\';
+ }
+ // add any composing characters
+ if (mb_char2len(*c) != mb_ptr2len(ml_get_cursor()))
{
- if (*c == firstc || vim_strchr((char_u *)(
- p_magic ? "\\~^$.*[" : "\\^$"), *c) != NULL)
+ int save_c = *c;
+
+ while (mb_char2len(*c) != mb_ptr2len(ml_get_cursor()))
{
- // put a backslash before special characters
+ curwin->w_cursor.col += mb_char2len(*c);
+ *c = gchar_cursor();
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()))
- {
- curwin->w_cursor.col += mb_char2len(*c);
- *c = gchar_cursor();
- stuffcharReadbuff(*c);
- }
- *c = save_c;
- }
- return FAIL;
+ *c = save_c;
}
+ return FAIL;
}
}
return OK;
diff --git a/src/testdir/test_search.vim b/src/testdir/test_search.vim
index d32369d5a..525d0d200 100644
--- 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
diff --git a/src/version.c b/src/version.c
index 475531779..3da2d7a09 100644
--- 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,