diff options
author | erw7 <erw7.github@gmail.com> | 2019-06-07 09:03:15 +0900 |
---|---|---|
committer | erw7 <erw7.github@gmail.com> | 2019-06-07 09:32:49 +0900 |
commit | 2a4e8a427e5e84f8e8a9477c0bfb8c1d376b3f1e (patch) | |
tree | 3a2c9466ff531fb5fcf2230d3e29752f3ee6639f | |
parent | 526382861495f92dc1e95a86d4a9b545459b7747 (diff) | |
download | rneovim-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.c | 9 | ||||
-rw-r--r-- | src/nvim/testdir/test_search.vim | 22 |
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 |