patch 9.1.0852: No warning when X11 registers are not available

Commit: 
https://github.com/vim/vim/commit/45e0704d9670c10bfaf2bb408d6a5cd639d23835
Author: Christian Brabandt <c...@256bit.org>
Date:   Mon Nov 11 20:52:55 2024 +0100

    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 <c...@256bit.org>

diff --git a/runtime/doc/gui.txt b/runtime/doc/gui.txt
index 071de9c4b..4fdfc0f05 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 @@ When the "unnamed" string is included in the 'clipboard' 
option, the unnamed
 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 dbd4b1084..0658bfab9 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 @@ Examples: (assuming the default option values)
 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 d38c8958e..00d65eb12 100644
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -5818,6 +5818,7 @@ W19       autocmd.txt     /*W19*
 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 6c8b60c2e..75e0f4f32 100644
--- a/src/clipboard.c
+++ b/src/clipboard.c
@@ -2220,10 +2220,12 @@ adjust_clip_reg(int *rp)
            *rp = ((clip_unnamed_saved & CLIP_UNNAMED_PLUS)
                                           && clip_plus.available) ? '+' : '*';
     }
-    if (!clip_star.available && *rp == '*')
-       *rp = 0;
-    if (!clip_plus.available && *rp == '+')
+    if ((!clip_star.available && *rp == '*') ||
+           (!clip_plus.available && *rp == '+'))
+    {
+       msg_warn_missing_clipboard();
        *rp = 0;
+    }
 }
 
 #endif // FEAT_CLIPBOARD
diff --git a/src/message.c b/src/message.c
index 03c7072a7..576d92268 100644
--- a/src/message.c
+++ b/src/message.c
@@ -55,6 +55,9 @@ static int msg_hist_len = 0;
 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_advance(int col)
            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 6657a08ec..54a0a7765 100644
--- a/src/proto/message.pro
+++ b/src/proto/message.pro
@@ -73,6 +73,7 @@ void give_warning(char_u *message, int hl);
 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 279c2140a..c9bc75224 100644
--- a/src/register.c
+++ b/src/register.c
@@ -198,6 +198,13 @@ valid_yank_reg(
 #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 @@ op_yank(oparg_T *oap, int deleting, int mess)
        return OK;
 
 #ifdef FEAT_CLIPBOARD
-    if (!clip_star.available && oap->regname == '*')
-       oap->regname = 0;
-    else if (!clip_plus.available && oap->regname == '+')
+    if ((!clip_star.available && oap->regname == '*') ||
+       (!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 b2261d4d6..f2d38d839 100644
--- a/src/testdir/test_registers.vim
+++ b/src/testdir/test_registers.vim
@@ -1045,4 +1045,16 @@ func Test_insert_small_delete_replace_mode()
   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 665b30b0f..ceb17ac42 100644
--- a/src/version.c
+++ b/src/version.c
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    852,
 /**/
     851,
 /**/

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
To view this discussion visit 
https://groups.google.com/d/msgid/vim_dev/E1tAaZv-00ExIZ-Dq%40256bit.org.

Raspunde prin e-mail lui