aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorerw7 <erw7.github@gmail.com>2019-06-07 09:03:15 +0900
committererw7 <erw7.github@gmail.com>2019-06-07 09:32:49 +0900
commit2a4e8a427e5e84f8e8a9477c0bfb8c1d376b3f1e (patch)
tree3a2c9466ff531fb5fcf2230d3e29752f3ee6639f
parent526382861495f92dc1e95a86d4a9b545459b7747 (diff)
downloadrneovim-2a4e8a427e5e84f8e8a9477c0bfb8c1d376b3f1e.tar.gz
rneovim-2a4e8a427e5e84f8e8a9477c0bfb8c1d376b3f1e.tar.bz2
rneovim-2a4e8a427e5e84f8e8a9477c0bfb8c1d376b3f1e.zip
vim-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 vim/vim#4488, closes vim/vim#4489) https://github.com/vim/vim/commit/db294adc65d73ffa5cdf3d0ab45ccbf05b965414
-rw-r--r--src/nvim/search.c9
-rw-r--r--src/nvim/testdir/test_search.vim22
2 files changed, 29 insertions, 2 deletions
diff --git a/src/nvim/search.c b/src/nvim/search.c
index d08385f4c2..4d02a07cbd 100644
--- a/src/nvim/search.c
+++ b/src/nvim/search.c
@@ -1218,9 +1218,14 @@ int do_search(
while (*r != NUL && *r == ' ') {
r++;
}
- memmove(msgbuf, r, msgbuf + STRLEN(msgbuf) - r);
+ size_t pat_len = msgbuf + STRLEN(msgbuf) - r;
+ memmove(msgbuf, r, pat_len);
// overwrite old text
- memset(r, ' ', msgbuf + STRLEN(msgbuf) - r);
+ if ((size_t)(r - msgbuf) >= pat_len) {
+ memset(r, ' ', pat_len);
+ } else {
+ memset(msgbuf + pat_len, ' ', r - msgbuf);
+ }
}
msg_outtrans(msgbuf);
msg_clr_eos();
diff --git a/src/nvim/testdir/test_search.vim b/src/nvim/testdir/test_search.vim
index f4fe4051e3..87cad241e2 100644
--- a/src/nvim/testdir/test_search.vim
+++ b/src/nvim/testdir/test_search.vim
@@ -609,3 +609,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