patch 9.1.1395: search_stat not reset when pattern differs in case
Problem: search_stat not reset when pattern differs in case
(tahzibijafar)
Solution: use STRNCMP instead of MB_STRNICMP macro
There was a long standing todo comment, that using MB_STRNICMP is wrong.
So let's change it to STRNCMP() instead. Even if it not handle
multi-byte characters correctly, then Vim will rather recompute the
search stat, instead of re-using the old (and possibly wrong) value.
fixes: #17312
closes: #17314
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
@ -3291,12 +3291,9 @@ update_search_stat(
|
|||||||
|| (dirc == '/' && LT_POS(p, lastpos)));
|
|| (dirc == '/' && LT_POS(p, lastpos)));
|
||||||
|
|
||||||
// If anything relevant changed the count has to be recomputed.
|
// If anything relevant changed the count has to be recomputed.
|
||||||
// MB_STRNICMP ignores case, but we should not ignore case.
|
|
||||||
// Unfortunately, there is no MB_STRNICMP function.
|
|
||||||
// XXX: above comment should be "no MB_STRCMP function" ?
|
|
||||||
if (!(chgtick == CHANGEDTICK(curbuf)
|
if (!(chgtick == CHANGEDTICK(curbuf)
|
||||||
&& (lastpat != NULL
|
&& (lastpat != NULL
|
||||||
&& MB_STRNICMP(lastpat, spats[last_idx].pat, lastpatlen) == 0
|
&& STRNCMP(lastpat, spats[last_idx].pat, lastpatlen) == 0
|
||||||
&& lastpatlen == spats[last_idx].patlen
|
&& lastpatlen == spats[last_idx].patlen
|
||||||
)
|
)
|
||||||
&& EQUAL_POS(lastpos, *cursor_pos)
|
&& EQUAL_POS(lastpos, *cursor_pos)
|
||||||
|
|||||||
@ -459,4 +459,23 @@ func Test_search_stat_backwards()
|
|||||||
call StopVimInTerminal(buf)
|
call StopVimInTerminal(buf)
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_search_stat_smartcase_ignorecase()
|
||||||
|
CheckRunVimInTerminal
|
||||||
|
|
||||||
|
let lines =<< trim END
|
||||||
|
set shm-=S ignorecase smartcase
|
||||||
|
call setline(1, [' MainmainmainmmmainmAin', ''])
|
||||||
|
END
|
||||||
|
call writefile(lines, 'Xsearchstat_ignorecase', '5')
|
||||||
|
|
||||||
|
let buf = RunVimInTerminal('-S Xsearchstat_ignorecase', #{rows: 10})
|
||||||
|
call term_sendkeys(buf, "/main\<cr>nnnn")
|
||||||
|
call WaitForAssert({-> assert_match('\[5\/5\]', term_getline(buf, 10))}, 1000)
|
||||||
|
|
||||||
|
call term_sendkeys(buf, "/mAin\<cr>")
|
||||||
|
call WaitForAssert({-> assert_match('\[1\/1\]', term_getline(buf, 10))}, 1000)
|
||||||
|
|
||||||
|
call StopVimInTerminal(buf)
|
||||||
|
endfunc
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
|||||||
@ -709,6 +709,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 */
|
||||||
|
/**/
|
||||||
|
1395,
|
||||||
/**/
|
/**/
|
||||||
1394,
|
1394,
|
||||||
/**/
|
/**/
|
||||||
|
|||||||
Reference in New Issue
Block a user