]> granicus.if.org Git - vim/commitdiff
updated for version 7.3.074 v7.3.074
authorBram Moolenaar <Bram@vim.org>
Thu, 2 Dec 2010 20:43:16 +0000 (21:43 +0100)
committerBram Moolenaar <Bram@vim.org>
Thu, 2 Dec 2010 20:43:16 +0000 (21:43 +0100)
Problem:    Can't use the "+ register like "* for yank and put.
Solution:   Add "unnamedplus" to the 'clipboard' option. (Ivan Krasilnikov)

runtime/doc/options.txt
src/eval.c
src/globals.h
src/ops.c
src/option.c
src/version.c

index 425f98314d8430f2b00a16606a4275571f59d872..49149ccf22f83b78a37221322d0ea77d9df2dbd1 100644 (file)
@@ -1434,6 +1434,15 @@ A jump table for the options with a short description can be found at |Q_op|.
                        explicitly accessed using the "* notation.  Also see
                        |gui-clipboard|.
 
+       unnamedplus     A variant of "unnamed" flag which uses the clipboard
+                       register '+' (|quoteplus|) instead of register '*' for
+                       all operations except yank.  Yank shall copy the text
+                       into register '+' and also into '*' when "unnamed" is
+                       included.
+                       Only available with the |+x11| feature.
+                       Availability can be checked with: >
+                               if has('unnamedplus')
+<
        autoselect      Works like the 'a' flag in 'guioptions': If present,
                        then whenever Visual mode is started, or the Visual
                        area extended, Vim tries to become the owner of the
index 356461742bb9a998e32be06ccf9d9ef22d6e82e2..a17d743e812e73d70f5563eba317465fdf126055 100644 (file)
@@ -12135,6 +12135,9 @@ f_has(argvars, rettv)
 #ifdef FEAT_TOOLBAR
        "toolbar",
 #endif
+#if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
+       "unnamedplus",
+#endif
 #ifdef FEAT_USR_CMDS
        "user-commands",    /* was accidentally included in 5.4 */
        "user_commands",
index 82731f9ab8392967c6a72e231ac2d07c60b82aa1..84aaa06ada1b7bbb93b5582361871bcbed470907 100644 (file)
@@ -512,7 +512,11 @@ EXTERN VimClipboard clip_plus;     /* CLIPBOARD selection in X11 */
 #  define clip_plus clip_star  /* there is only one clipboard */
 #  define ONE_CLIPBOARD
 # endif
-EXTERN int     clip_unnamed INIT(= FALSE);
+
+#define CLIP_UNNAMED      1
+#define CLIP_UNNAMED_PLUS 2
+EXTERN int     clip_unnamed INIT(= 0); /* above two values or'ed */
+
 EXTERN int     clip_autoselect INIT(= FALSE);
 EXTERN int     clip_autoselectml INIT(= FALSE);
 EXTERN int     clip_html INIT(= FALSE);
index 04ef069d5a8d7b1a8470cb3f6ba3d6fcbcffe712..f31f395e99c5773334a6323134cd18e1425e0aa9 100644 (file)
--- a/src/ops.c
+++ b/src/ops.c
@@ -1584,9 +1584,11 @@ cmdline_paste_reg(regname, literally, remcr)
 adjust_clip_reg(rp)
     int                *rp;
 {
-    /* If no reg. specified, and "unnamed" is in 'clipboard', use '*' reg. */
-    if (*rp == 0 && clip_unnamed)
-       *rp = '*';
+    /* If no reg. specified, and "unnamed" or "unnamedplus" is in 'clipboard',
+     * use '*' or '+' reg, respectively. "unnamedplus" prevails. */
+    if (*rp == 0 && clip_unnamed != 0)
+       *rp = ((clip_unnamed & CLIP_UNNAMED_PLUS) && clip_plus.available)
+                                                                 ? '+' : '*';
     if (!clip_star.available && *rp == '*')
        *rp = 0;
     if (!clip_plus.available && *rp == '+')
@@ -2842,6 +2844,7 @@ op_yank(oap, deleting, mess)
     char_u             *p;
     char_u             *pnew;
     struct block_def   bd;
+    int                        did_star = FALSE;
 
                                    /* check for read-only register */
     if (oap->regname != 0 && !valid_yank_reg(oap->regname, TRUE))
@@ -3115,7 +3118,8 @@ op_yank(oap, deleting, mess)
      */
     if (clip_star.available
            && (curr == &(y_regs[STAR_REGISTER])
-               || (!deleting && oap->regname == 0 && clip_unnamed)))
+               || (!deleting && oap->regname == 0
+                                          && (clip_unnamed & CLIP_UNNAMED))))
     {
        if (curr != &(y_regs[STAR_REGISTER]))
            /* Copy the text from register 0 to the clipboard register. */
@@ -3123,6 +3127,7 @@ op_yank(oap, deleting, mess)
 
        clip_own_selection(&clip_star);
        clip_gen_set_selection(&clip_star);
+       did_star = TRUE;
     }
 
 # ifdef FEAT_X11
@@ -3130,12 +3135,19 @@ op_yank(oap, deleting, mess)
      * If we were yanking to the '+' register, send result to selection.
      * Also copy to the '*' register, in case auto-select is off.
      */
-    else if (clip_plus.available && curr == &(y_regs[PLUS_REGISTER]))
+    if (clip_plus.available
+           && (curr == &(y_regs[PLUS_REGISTER])
+               || (!deleting && oap->regname == 0
+                                     && (clip_unnamed & CLIP_UNNAMED_PLUS))))
     {
+       if (curr != &(y_regs[PLUS_REGISTER]))
+           /* Copy the text from register 0 to the clipboard register. */
+           copy_yank_reg(&(y_regs[PLUS_REGISTER]));
+
        /* No need to copy to * register upon 'unnamed' now - see below */
        clip_own_selection(&clip_plus);
        clip_gen_set_selection(&clip_plus);
-       if (!clip_isautosel())
+       if (!clip_isautosel() && !did_star)
        {
            copy_yank_reg(&(y_regs[STAR_REGISTER]));
            clip_own_selection(&clip_star);
index 419ef68ef490b76b3da43af4be72b97e8ab7ee8a..87eadd04fd85f02f171ce4b9e7a3e585965c8a22 100644 (file)
@@ -7307,7 +7307,7 @@ check_stl_option(s)
     static char_u *
 check_clipboard_option()
 {
-    int                new_unnamed = FALSE;
+    int                new_unnamed = 0;
     int                new_autoselect = FALSE;
     int                new_autoselectml = FALSE;
     int                new_html = FALSE;
@@ -7319,9 +7319,15 @@ check_clipboard_option()
     {
        if (STRNCMP(p, "unnamed", 7) == 0 && (p[7] == ',' || p[7] == NUL))
        {
-           new_unnamed = TRUE;
+           new_unnamed |= CLIP_UNNAMED;
            p += 7;
        }
+        else if (STRNCMP(p, "unnamedplus", 11) == 0
+                                           && (p[11] == ',' || p[11] == NUL))
+       {
+           new_unnamed |= CLIP_UNNAMED_PLUS;
+           p += 11;
+       }
        else if (STRNCMP(p, "autoselect", 10) == 0
                                        && (p[10] == ',' || p[10] == NUL))
        {
index 9d414e80301bdbbb1a878e7ad9b5c761a2d3428f..f400d1c668ee5c278316a23a40e1f04a99694c97 100644 (file)
@@ -714,6 +714,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    74,
 /**/
     73,
 /**/