Mercurial > vim
changeset 16949:a32169a40566 v8.1.1475
patch 8.1.1475: search string not displayed when 'rightleft' is set
commit https://github.com/vim/vim/commit/db294adc65d73ffa5cdf3d0ab45ccbf05b965414
Author: Bram Moolenaar <Bram@vim.org>
Date: Thu Jun 6 12:49:29 2019 +0200
patch 8.1.1475: search string not displayed when 'rightleft' is set
Problem: Search string not displayed when 'rightleft' is set.
Solution: Clear the right part of the old text. (closes https://github.com/vim/vim/issues/4488, closes https://github.com/vim/vim/issues/4489)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Thu, 06 Jun 2019 13:00:05 +0200 |
parents | 1583207ec2ab |
children | a8735038f8d5 |
files | src/search.c src/testdir/test_search.vim src/version.c |
diffstat | 3 files changed, 31 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/search.c +++ b/src/search.c @@ -1462,6 +1462,7 @@ do_search( if (curwin->w_p_rl && *curwin->w_p_rlc == 's') { char_u *r; + size_t pat_len; r = reverse_text(msgbuf); if (r != NULL) @@ -1471,9 +1472,13 @@ do_search( // move reversed text to beginning of buffer while (*r != NUL && *r == ' ') r++; - mch_memmove(msgbuf, r, msgbuf + STRLEN(msgbuf) - r); + pat_len = msgbuf + STRLEN(msgbuf) - r; + mch_memmove(msgbuf, r, pat_len); // overwrite old text - vim_memset(r, ' ', msgbuf + STRLEN(msgbuf) - r); + if ((size_t)(r - msgbuf) >= pat_len) + vim_memset(r, ' ', pat_len); + else + vim_memset(msgbuf + pat_len, ' ', r - msgbuf); } } #endif
--- a/src/testdir/test_search.vim +++ b/src/testdir/test_search.vim @@ -1289,3 +1289,25 @@ func Test_search_match_at_curpos() close! endfunc + +func Test_search_display_pattern() + new + call setline(1, ['foo', 'bar', 'foobar']) + + call cursor(1, 1) + let @/ = 'foo' + let pat = escape(@/, '()*?'. '\s\+') + let g:a = execute(':unsilent :norm! n') + call assert_match(pat, g:a) + + " right-left + if exists("+rightleft") + set rl + call cursor(1, 1) + let @/ = 'foo' + let pat = 'oof/\s\+' + let g:a = execute(':unsilent :norm! n') + call assert_match(pat, g:a) + set norl + endif +endfunc