diff options
-rw-r--r-- | src/nvim/ops.c | 3 | ||||
-rw-r--r-- | test/functional/clipboard/clipboard_provider_spec.lua | 18 |
2 files changed, 20 insertions, 1 deletions
diff --git a/src/nvim/ops.c b/src/nvim/ops.c index 79a7271819..bd436bfac6 100644 --- a/src/nvim/ops.c +++ b/src/nvim/ops.c @@ -5616,6 +5616,9 @@ static yankreg_T *adjust_clipboard_name(int *name, bool quiet, bool writing) if (explicit_cb_reg) { target = &y_regs[*name == '*' ? STAR_REGISTER : PLUS_REGISTER]; + if (writing && (cb_flags & (*name == '*' ? CB_UNNAMED : CB_UNNAMEDPLUS))) { + clipboard_needs_update = false; + } goto end; } else { // unnamed register: "implicit" clipboard if (writing && clipboard_delay_update) { diff --git a/test/functional/clipboard/clipboard_provider_spec.lua b/test/functional/clipboard/clipboard_provider_spec.lua index 2bbc678a02..b2d75db745 100644 --- a/test/functional/clipboard/clipboard_provider_spec.lua +++ b/test/functional/clipboard/clipboard_provider_spec.lua @@ -236,7 +236,7 @@ describe('clipboard', function() end) end) -describe('clipboard', function() +describe('clipboard (with fake clipboard.vim)', function() local function reset(...) clear('--cmd', 'let &rtp = "test/functional/fixtures,".&rtp', ...) end @@ -664,4 +664,20 @@ describe('clipboard', function() the a sourcetarget]]) end) + it('setreg("*") with clipboard=unnamed #5646', function() + source([=[ + function! Paste_without_yank(direction) range + let [reg_save,regtype_save] = [getreg('*'), getregtype('*')] + normal! gvp + call setreg('*', reg_save, regtype_save) + endfunction + xnoremap p :call Paste_without_yank('p')<CR> + set clipboard=unnamed + ]=]) + insert('some words') + feed('gg0yiw') + feed('wviwp') + expect('some some') + eq('some', eval('getreg("*")')) + end) end) |