0
0
mirror of https://github.com/vim/vim.git synced 2025-09-29 04:34:16 -04:00

patch 9.0.1555: setcharsearch() does not clear last searched char properly

Problem:    setcharsearch() does not clear last searched char properly.
Solution:   Do not accept lastc_bytelen smaller than one. (closes #12398)
This commit is contained in:
zeertzjq
2023-05-14 17:39:18 +01:00
committed by Bram Moolenaar
parent e42c27d9e8
commit e5d91ba1de
4 changed files with 14 additions and 3 deletions

View File

@@ -496,7 +496,7 @@ last_csearch_until(void)
} }
void void
set_last_csearch(int c, char_u *s UNUSED, int len UNUSED) set_last_csearch(int c, char_u *s, int len)
{ {
*lastc = c; *lastc = c;
lastc_bytelen = len; lastc_bytelen = len;
@@ -1789,7 +1789,7 @@ searchc(cmdarg_T *cap, int t_cmd)
} }
else // repeat previous search else // repeat previous search
{ {
if (*lastc == NUL && lastc_bytelen == 1) if (*lastc == NUL && lastc_bytelen <= 1)
return FAIL; return FAIL;
if (dir) // repeat in opposite direction if (dir) // repeat in opposite direction
dir = -lastcdir; dir = -lastcdir;
@@ -1833,7 +1833,7 @@ searchc(cmdarg_T *cap, int t_cmd)
return FAIL; return FAIL;
col -= (*mb_head_off)(p, p + col - 1) + 1; col -= (*mb_head_off)(p, p + col - 1) + 1;
} }
if (lastc_bytelen == 1) if (lastc_bytelen <= 1)
{ {
if (p[col] == c && stop) if (p[col] == c && stop)
break; break;

View File

@@ -38,6 +38,8 @@ func Test_charsearch()
" clear the character search " clear the character search
call setcharsearch({'char' : ''}) call setcharsearch({'char' : ''})
call assert_equal('', getcharsearch().char) call assert_equal('', getcharsearch().char)
call assert_beeps('normal ;')
call assert_beeps('normal ,')
call assert_fails("call setcharsearch([])", 'E1206:') call assert_fails("call setcharsearch([])", 'E1206:')
enew! enew!

View File

@@ -13,6 +13,13 @@ func Test_search_cmds()
call assert_equal([0, 1, 43, 0], getpos('.')) call assert_equal([0, 1, 43, 0], getpos('.'))
normal! , normal! ,
call assert_equal([0, 1, 28, 0], getpos('.')) call assert_equal([0, 1, 28, 0], getpos('.'))
call assert_equal('最', getcharsearch().char)
call setcharsearch({'char' : ''})
call assert_equal('', getcharsearch().char)
call assert_beeps('normal ;')
call assert_equal([0, 1, 28, 0], getpos('.'))
call assert_beeps('normal ,')
call assert_equal([0, 1, 28, 0], getpos('.'))
bw! bw!
endfunc endfunc

View File

@@ -695,6 +695,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1555,
/**/ /**/
1554, 1554,
/**/ /**/