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
--- a/src/version.c
+++ b/src/version.c
@@ -768,6 +768,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1475,
+/**/
     1474,
 /**/
     1473,