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

It is strange that Ex commands that explicitly interact with the
clipboard show provider warning, but Normal mode commands do not.
This commit is contained in:
zeertzjq
2023-01-04 07:17:54 +08:00
committed by GitHub
parent d56c603caf
commit 5529b07316
2 changed files with 49 additions and 5 deletions

View File

@@ -6433,7 +6433,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=[[