patch 9.1.0852: No warning when X11 registers are not available
Problem: No warning when X11 registers are not available
(delvh)
Solution: Output W23 once when connection to X11 clipboard/selection
is not possible, mention in the documentation, that register 0
will be used instead
Vim silently uses the 0 register, when clipboard or selection register * or +
are not available. This might be a bit unexpected for the user.
So let's just warn once when this happens.
fixes: #14768
closes: #16013
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/runtime/doc/gui.txt b/runtime/doc/gui.txt
index 071de9c..4fdfc0f 100644
--- a/runtime/doc/gui.txt
+++ b/runtime/doc/gui.txt
@@ -1,4 +1,4 @@
-*gui.txt* For Vim version 9.1. Last change: 2024 Jul 17
+*gui.txt* For Vim version 9.1. Last change: 2024 Nov 07
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -474,6 +474,8 @@
register is the same as the "* register. Thus you can yank to and paste the
selection without prepending "* to commands.
+See also |W23|.
+
==============================================================================
5. Menus *menus*
diff --git a/runtime/doc/gui_x11.txt b/runtime/doc/gui_x11.txt
index dbd4b10..0658bfa 100644
--- a/runtime/doc/gui_x11.txt
+++ b/runtime/doc/gui_x11.txt
@@ -1,4 +1,4 @@
-*gui_x11.txt* For Vim version 9.1. Last change: 2024 Apr 22
+*gui_x11.txt* For Vim version 9.1. Last change: 2024 Nov 11
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -708,6 +708,14 @@
Note that the text in the "+ register remains available when making a Visual
selection, which makes other text available in the "* register. That allows
overwriting selected text.
+
+ *W23*
+When you are yanking into the "* or "+ register and Vim cannot establish a
+connection to the X11 selection (or clipboard), it will use register 0 and
+output a warning:
+
+ Warning: Clipboard register not available, using register 0 ~
+
*x11-cut-buffer*
There are, by default, 8 cut-buffers: CUT_BUFFER0 to CUT_BUFFER7. Vim only
uses CUT_BUFFER0, which is the one that xterm uses by default.
diff --git a/runtime/doc/tags b/runtime/doc/tags
index d38c895..00d65eb 100644
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -5818,6 +5818,7 @@
W20 if_pyth.txt /*W20*
W21 if_pyth.txt /*W21*
W22 userfunc.txt /*W22*
+W23 gui_x11.txt /*W23*
WORD motion.txt /*WORD*
WSL os_win32.txt /*WSL*
WWW intro.txt /*WWW*
diff --git a/src/clipboard.c b/src/clipboard.c
index 6c8b60c..75e0f4f 100644
--- a/src/clipboard.c
+++ b/src/clipboard.c
@@ -2220,10 +2220,12 @@
*rp = ((clip_unnamed_saved & CLIP_UNNAMED_PLUS)
&& clip_plus.available) ? '+' : '*';
}
- if (!clip_star.available && *rp == '*')
+ if ((!clip_star.available && *rp == '*') ||
+ (!clip_plus.available && *rp == '+'))
+ {
+ msg_warn_missing_clipboard();
*rp = 0;
- if (!clip_plus.available && *rp == '+')
- *rp = 0;
+ }
}
#endif // FEAT_CLIPBOARD
diff --git a/src/message.c b/src/message.c
index 03c7072..576d922 100644
--- a/src/message.c
+++ b/src/message.c
@@ -55,6 +55,9 @@
static FILE *verbose_fd = NULL;
static int verbose_did_open = FALSE;
+static int did_warn_clipboard = FALSE;
+static char *warn_clipboard = "W23: Clipboard register not available, using register 0";
+
/*
* When writing messages to the screen, there are many different situations.
* A number of variables is used to remember the current state:
@@ -4060,6 +4063,19 @@
msg_putchar(' ');
}
+/*
+ * Warn about missing Clipboard Support
+ */
+ void
+msg_warn_missing_clipboard(void)
+{
+ if (!global_busy && !did_warn_clipboard)
+ {
+ msg(_(warn_clipboard));
+ did_warn_clipboard = TRUE;
+ }
+}
+
#if defined(FEAT_CON_DIALOG) || defined(PROTO)
/*
* Used for "confirm()" function, and the :confirm command prefix.
diff --git a/src/proto/message.pro b/src/proto/message.pro
index 6657a08..54a0a77 100644
--- a/src/proto/message.pro
+++ b/src/proto/message.pro
@@ -73,6 +73,7 @@
void give_warning_with_source(char_u *message, int hl, int with_source);
void give_warning2(char_u *message, char_u *a1, int hl);
void msg_advance(int col);
+void msg_warn_missing_clipboard(void);
int do_dialog(int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield, int ex_cmd);
int vim_dialog_yesno(int type, char_u *title, char_u *message, int dflt);
int vim_dialog_yesnocancel(int type, char_u *title, char_u *message, int dflt);
diff --git a/src/register.c b/src/register.c
index 279c214..c9bc752 100644
--- a/src/register.c
+++ b/src/register.c
@@ -198,6 +198,13 @@
#endif
)
return TRUE;
+ // clipboard support not enabled in this build
+ else if (regname == '*' || regname == '+')
+ {
+ // Warn about missing clipboard support once
+ msg_warn_missing_clipboard();
+ return FALSE;
+ }
return FALSE;
}
@@ -1173,10 +1180,12 @@
return OK;
#ifdef FEAT_CLIPBOARD
- if (!clip_star.available && oap->regname == '*')
+ if ((!clip_star.available && oap->regname == '*') ||
+ (!clip_plus.available && oap->regname == '+'))
+ {
oap->regname = 0;
- else if (!clip_plus.available && oap->regname == '+')
- oap->regname = 0;
+ msg_warn_missing_clipboard();
+ }
#endif
if (!deleting) // op_delete() already set y_current
diff --git a/src/testdir/test_registers.vim b/src/testdir/test_registers.vim
index b2261d4..f2d38d8 100644
--- a/src/testdir/test_registers.vim
+++ b/src/testdir/test_registers.vim
@@ -1045,4 +1045,16 @@
bwipe!
endfunc
+" Test for W23 when clipboard is not available
+func Test_clipboard_regs_not_working()
+ CheckNotGui
+ if !has("clipboard")
+ new
+ call append(0, "text for clipboard test")
+ let mess = execute(':norm "*yiw')
+ call assert_match('W23', mess)
+ bw!
+ endif
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index 665b30b..ceb17ac 100644
--- a/src/version.c
+++ b/src/version.c
@@ -705,6 +705,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 852,
+/**/
851,
/**/
850,