]> granicus.if.org Git - vim/commitdiff
patch 8.1.1475: search string not displayed when 'rightleft' is set v8.1.1475
authorBram Moolenaar <Bram@vim.org>
Thu, 6 Jun 2019 10:49:29 +0000 (12:49 +0200)
committerBram Moolenaar <Bram@vim.org>
Thu, 6 Jun 2019 10:49:29 +0000 (12:49 +0200)
Problem:    Search string not displayed when 'rightleft' is set.
Solution:   Clear the right part of the old text. (closes #4488, closes #4489)

src/search.c
src/testdir/test_search.vim
src/version.c

index 423f3fccbef0cc47c26ab2b77251ebc91fdd6856..ce87a3ef39be271cd03b9164275ac90aa067c2fc 100644 (file)
@@ -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
index d59f39dc7eed86ac0ec389561c1049f0e7ca4d11..8090deeeb75a4cd41925e26d45bf970e4f1dff02 100644 (file)
@@ -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
index a422cb0a4500d57c178fc242fc53ce45f4bad1fe..8f707b0263a7cc8806374dbae8c231e6c368142b 100644 (file)
@@ -767,6 +767,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1475,
 /**/
     1474,
 /**/