fix(clipboard): show provider warning when not during batch changes

It is strange that Ex commands that explicitly interact with the
clipboard show provider warning, but Normal mode commands do not.

(cherry picked from commit c98571de2a)
This commit is contained in:
zeertzjq
2022-12-17 09:28:58 +08:00
committed by github-actions[bot]
parent 8bbed45e10
commit 384caf8c1c
2 changed files with 49 additions and 5 deletions

View File

@ -6376,7 +6376,7 @@ static yankreg_T *adjust_clipboard_name(int *name, bool quiet, bool writing)
}
if (!eval_has_provider("clipboard")) {
if (batch_change_count == 1 && !quiet
if (batch_change_count <= 1 && !quiet
&& (!clipboard_didwarn || (explicit_cb_reg && !redirecting()))) {
clipboard_didwarn = true;
// Do NOT error (emsg()) here--if it interrupts :redir we get into

View File

@ -106,8 +106,53 @@ describe('clipboard', function()
basic_register_test()
end)
it('`:redir @+>` with invalid g:clipboard shows exactly one error #7184',
function()
it('using "+ in Normal mode with invalid g:clipboard always shows error', function()
insert('a')
command("let g:clipboard = 'bogus'")
feed('"+yl')
screen:expect([[
^a |
{0:~ }|
{0:~ }|
clipboard: No provider. Try ":checkhealth" or ":h clipboard". |
]])
feed('"+p')
screen:expect([[
a^a |
{0:~ }|
{0:~ }|
clipboard: No provider. Try ":checkhealth" or ":h clipboard". |
]])
end)
it('using clipboard=unnamedplus with invalid g:clipboard shows error once', function()
insert('a')
command("let g:clipboard = 'bogus'")
command('set clipboard=unnamedplus')
feed('yl')
screen:expect([[
^a |
{0:~ }|
{0:~ }|
clipboard: No provider. Try ":checkhealth" or ":h clipboard". |
]])
feed(':<CR>')
screen:expect([[
^a |
{0:~ }|
{0:~ }|
: |
]])
feed('p')
screen:expect([[
a^a |
{0:~ }|
{0:~ }|
: |
]])
end)
it('`:redir @+>` with invalid g:clipboard shows exactly one error #7184', function()
command("let g:clipboard = 'bogus'")
feed_command('redir @+> | :silent echo system("cat CONTRIBUTING.md") | redir END')
screen:expect([[
@ -118,8 +163,7 @@ describe('clipboard', function()
]])
end)
it('`:redir @+>|bogus_cmd|redir END` + invalid g:clipboard must not recurse #7184',
function()
it('`:redir @+>|bogus_cmd|redir END` + invalid g:clipboard must not recurse #7184', function()
command("let g:clipboard = 'bogus'")
feed_command('redir @+> | bogus_cmd | redir END')
screen:expect{grid=[[