]> granicus.if.org Git - vim/commitdiff
updated for version 7.3.597 v7.3.597
authorBram Moolenaar <Bram@vim.org>
Tue, 10 Jul 2012 14:49:23 +0000 (16:49 +0200)
committerBram Moolenaar <Bram@vim.org>
Tue, 10 Jul 2012 14:49:23 +0000 (16:49 +0200)
Problem:    'clipboard' "autoselect" only applies to the * register. (Sergey
            Vakulenko)
Solution:   Make 'autoselect' work for the + register. (Christian Brabant)
            Add the "autoselectplus" option in 'clipboard' and the "P" flag in
            'guioptions'.

runtime/doc/options.txt
src/globals.h
src/gui.c
src/normal.c
src/ops.c
src/option.h
src/proto/ui.pro
src/screen.c
src/ui.c
src/version.c

index e13ffb0dcd43244c6f896a739afaab9b29186e2a..f1920bfd1fdb17f12b2de2f5f035b7098686a632 100644 (file)
@@ -1452,6 +1452,7 @@ A jump table for the options with a short description can be found at |Q_op|.
        This option is a list of comma separated names.
        These names are recognized:
 
+                                               *clipboard-unnamed*
        unnamed         When included, Vim will use the clipboard register '*'
                        for all yank, delete, change and put operations which
                        would normally go to the unnamed register.  When a
@@ -1481,9 +1482,16 @@ A jump table for the options with a short description can be found at |Q_op|.
                        "autoselect" flag is used.
                        Also applies to the modeless selection.
 
+                                               *clipboard-autoselectplus*
+       autoselectplus  Like "autoselect" but using the + register instead of
+                       the * register.  Compare to the 'P' flag in
+                       'guioptions'.
+
+                                               *clipboard-autoselectml*
        autoselectml    Like "autoselect", but for the modeless selection
                        only.  Compare to the 'A' flag in 'guioptions'.
 
+                                               *clipboard-html*
        html            When the clipboard contains HTML, use this when
                        pasting.  When putting text on the clipboard, mark it
                        as HTML.  This works to copy rendered HTML from
@@ -1494,6 +1502,7 @@ A jump table for the options with a short description can be found at |Q_op|.
                        Only supported for GTK version 2 and later.
                        Only available with the |+multi_byte| feature.
 
+                                               *clipboard-exclude*
        exclude:{pattern}
                        Defines a pattern that is matched against the name of
                        the terminal 'term'.  If there is a match, no
@@ -3589,6 +3598,9 @@ A jump table for the options with a short description can be found at |Q_op|.
                windowing system's global selection unless explicitly told to
                by a yank or delete operation for the "* register.
                The same applies to the modeless selection.
+                                                               *'go-P'*
+         'P'   Like autoselect but using the "+ register instead of the "*
+               register.
                                                                *'go-A'*
          'A'   Autoselect for the modeless selection.  Like 'a', but only
                applies to the modeless selection.
index 615cdf7c6840ac0087d48d016544af3eb5faa3a4..81cdabba2f216e3a1127b9dc369bcb5b78de6fd7 100644 (file)
@@ -517,7 +517,8 @@ EXTERN VimClipboard clip_plus;      /* CLIPBOARD selection in X11 */
 # 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_autoselect_star INIT(= FALSE);
+EXTERN int     clip_autoselect_plus INIT(= FALSE);
 EXTERN int     clip_autoselectml INIT(= FALSE);
 EXTERN int     clip_html INIT(= FALSE);
 EXTERN regprog_T *clip_exclude_prog INIT(= NULL);
index caf1f12059198dd9e4d556ae727172bc06c02c97..f30952c319a65271cbc6f69be133416574dee9a3 100644 (file)
--- a/src/gui.c
+++ b/src/gui.c
@@ -3154,7 +3154,7 @@ button_set:
     }
 
     if (clip_star.state != SELECT_CLEARED && !did_clip)
-       clip_clear_selection();
+       clip_clear_selection(&clip_star);
 #endif
 
     /* Don't put events in the input queue now. */
index 8134adb2d50e2f789191439ac5f9efda0572df4b..66654f8d793f406973deb44af034b33040ea88c2 100644 (file)
@@ -1451,7 +1451,7 @@ do_pending_operator(cap, old_col, gui_yank)
      * This could call do_pending_operator() recursively, but that's OK
      * because gui_yank will be TRUE for the nested call.
      */
-    if (clip_star.available
+    if ((clip_star.available || clip_plus.available)
            && oap->op_type != OP_NOP
            && !gui_yank
 # ifdef FEAT_VISUAL
index 2c054d9b8890d29d10cce7cf6f84a8965d5a69e1..c60f3375ee2413f0c5883ccfef6a6c6647e29db3 100644 (file)
--- a/src/ops.c
+++ b/src/ops.c
@@ -962,8 +962,14 @@ get_register(name, copy)
      * selection too. */
     if (name == '*' && clip_star.available)
     {
-       if (clip_isautosel())
-           clip_update_selection();
+       if (clip_isautosel_star())
+           clip_update_selection(&clip_star);
+       may_get_selection(name);
+    }
+    if (name == '+' && clip_plus.available)
+    {
+       if (clip_isautosel_plus())
+           clip_update_selection(&clip_plus);
        may_get_selection(name);
     }
 #endif
@@ -3190,7 +3196,8 @@ op_yank(oap, deleting, mess)
 
        clip_own_selection(&clip_plus);
        clip_gen_set_selection(&clip_plus);
-       if (!clip_isautosel() && !did_star && curr == &(y_regs[PLUS_REGISTER]))
+       if (!clip_isautosel_star() && !did_star
+                                         && curr == &(y_regs[PLUS_REGISTER]))
        {
            copy_yank_reg(&(y_regs[STAR_REGISTER]));
            clip_own_selection(&clip_star);
index 756cd1aaf9be9ec0f6a8f2fbadce7775cc9b961a..b0cbe1294a88d55b5c905fd8ce9847079e280c9f 100644 (file)
 #define GO_MENUS       'm'             /* use menu bar */
 #define GO_NOSYSMENU   'M'             /* don't source system menu */
 #define GO_POINTER     'p'             /* pointer enter/leave callbacks */
+#define GO_ASELPLUS    'P'             /* autoselectPlus */
 #define GO_RIGHT       'r'             /* use right scrollbar */
 #define GO_VRIGHT      'R'             /* right scrollbar with vert split */
 #define GO_TEAROFF     't'             /* add tear-off menu items */
index 7b65680bf01b2d423d1d55e0851ac84fdb28d6fc..813d496ada001568736a545a901e007f24b81f97 100644 (file)
@@ -11,17 +11,17 @@ void ui_set_shellsize __ARGS((int mustset));
 void ui_new_shellsize __ARGS((void));
 void ui_breakcheck __ARGS((void));
 void clip_init __ARGS((int can_use));
-void clip_update_selection __ARGS((void));
+void clip_update_selection __ARGS((VimClipboard *clip));
 void clip_own_selection __ARGS((VimClipboard *cbd));
 void clip_lose_selection __ARGS((VimClipboard *cbd));
-void clip_copy_selection __ARGS((void));
 void clip_auto_select __ARGS((void));
-int clip_isautosel __ARGS((void));
+int clip_isautosel_star __ARGS((void));
+int clip_isautosel_plus __ARGS((void));
 void clip_modeless __ARGS((int button, int is_click, int is_drag));
 void clip_start_selection __ARGS((int col, int row, int repeated_click));
 void clip_process_selection __ARGS((int button, int col, int row, int_u repeated_click));
 void clip_may_redraw_selection __ARGS((int row, int col, int len));
-void clip_clear_selection __ARGS((void));
+void clip_clear_selection __ARGS((VimClipboard *cbd));
 void clip_may_clear_selection __ARGS((int row1, int row2));
 void clip_scroll_selection __ARGS((int rows));
 void clip_copy_modeless_selection __ARGS((int both));
index 64d06ebe08fb63777e8869ac21fec938037ea8e9..c9f447c9ca7eb617cfc58290ee9be0bcd1288369 100644 (file)
@@ -519,8 +519,10 @@ update_screen(type)
 # endif
 # ifdef FEAT_CLIPBOARD
                /* When Visual area changed, may have to update selection. */
-               if (clip_star.available && clip_isautosel())
-                   clip_update_selection();
+               if (clip_star.available && clip_isautosel_star())
+                   clip_update_selection(&clip_star);
+               if (clip_plus.available && clip_isautosel_plus())
+                   clip_update_selection(&clip_plus);
 # endif
 #ifdef FEAT_GUI
                /* Remove the cursor before starting to do anything, because
@@ -814,8 +816,10 @@ updateWindow(wp)
 
 #ifdef FEAT_CLIPBOARD
     /* When Visual area changed, may have to update selection. */
-    if (clip_star.available && clip_isautosel())
-       clip_update_selection();
+    if (clip_star.available && clip_isautosel_star())
+       clip_update_selection(&clip_star);
+    if (clip_plus.available && clip_isautosel_plus())
+       clip_update_selection(&clip_plus);
 #endif
 
     win_update(wp);
@@ -3000,7 +3004,10 @@ win_line(wp, lnum, startrow, endrow, nochange)
            area_highlighting = TRUE;
            attr = hl_attr(HLF_V);
 #if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
-           if (clip_star.available && !clip_star.owned && clip_isautosel())
+           if ((clip_star.available && !clip_star.owned
+                                                    && clip_isautosel_star())
+                   || (clip_plus.available && !clip_plus.owned
+                                                   && clip_isautosel_plus()))
                attr = hl_attr(HLF_VNC);
 #endif
        }
@@ -9060,7 +9067,7 @@ screen_ins_lines(off, row, line_count, end, wp)
            || (wp != NULL && wp->w_width != Columns)
 # endif
        )
-       clip_clear_selection();
+       clip_clear_selection(&clip_star);
     else
        clip_scroll_selection(-line_count);
 #endif
@@ -9281,7 +9288,7 @@ screen_del_lines(off, row, line_count, end, force, wp)
            || (wp != NULL && wp->w_width != Columns)
 # endif
        )
-       clip_clear_selection();
+       clip_clear_selection(&clip_star);
     else
        clip_scroll_selection(line_count);
 #endif
index 4c4c2eefba6f280917013e5dfaa0b4da35e3b261..d164376d400f3f4420a159f5145d639b0bcaa9a1 100644 (file)
--- a/src/ui.c
+++ b/src/ui.c
@@ -381,6 +381,8 @@ ui_breakcheck()
 
 #if defined(FEAT_CLIPBOARD) || defined(PROTO)
 
+static void clip_copy_selection __ARGS((VimClipboard *clip));
+
 /*
  * Selection stuff using Visual mode, for cutting and pasting text to other
  * windows.
@@ -423,9 +425,10 @@ clip_init(can_use)
  * this is called whenever VIsual mode is ended.
  */
     void
-clip_update_selection()
+clip_update_selection(clip)
+    VimClipboard    *clip;
 {
-    pos_T    start, end;
+    pos_T          start, end;
 
     /* If visual mode is only due to a redo command ("."), then ignore it */
     if (!redo_VIsual_busy && VIsual_active && (State & NORMAL))
@@ -444,17 +447,17 @@ clip_update_selection()
            start = curwin->w_cursor;
            end = VIsual;
        }
-       if (!equalpos(clip_star.start, start)
-               || !equalpos(clip_star.end, end)
-               || clip_star.vmode != VIsual_mode)
+       if (!equalpos(clip->start, start)
+               || !equalpos(clip->end, end)
+               || clip->vmode != VIsual_mode)
        {
-           clip_clear_selection();
-           clip_star.start = start;
-           clip_star.end = end;
-           clip_star.vmode = VIsual_mode;
-           clip_free_selection(&clip_star);
-           clip_own_selection(&clip_star);
-           clip_gen_set_selection(&clip_star);
+           clip_clear_selection(clip);
+           clip->start = start;
+           clip->end = end;
+           clip->vmode = VIsual_mode;
+           clip_free_selection(clip);
+           clip_own_selection(clip);
+           clip_gen_set_selection(clip);
        }
     }
 }
@@ -475,7 +478,7 @@ clip_own_selection(cbd)
        int was_owned = cbd->owned;
 
        cbd->owned = (clip_gen_own_selection(cbd) == OK);
-       if (!was_owned && cbd == &clip_star)
+       if (!was_owned && (cbd == &clip_star || cbd == &clip_plus))
        {
            /* May have to show a different kind of highlighting for the
             * selected area.  There is no specific redraw command for this,
@@ -483,7 +486,8 @@ clip_own_selection(cbd)
            if (cbd->owned
                    && (get_real_state() == VISUAL
                                            || get_real_state() == SELECTMODE)
-                   && clip_isautosel()
+                   && (cbd == &clip_star ? clip_isautosel_star()
+                                                     : clip_isautosel_plus())
                    && hl_attr(HLF_V) != hl_attr(HLF_VNC))
                redraw_curbuf_later(INVERTED_ALL);
        }
@@ -502,12 +506,15 @@ clip_lose_selection(cbd)
 #ifdef FEAT_X11
     int            was_owned = cbd->owned;
 #endif
-    int     visual_selection = (cbd == &clip_star);
+    int     visual_selection = FALSE;
+
+    if (cbd == &clip_star || cbd == &clip_plus)
+       visual_selection = TRUE;
 
     clip_free_selection(cbd);
     cbd->owned = FALSE;
     if (visual_selection)
-       clip_clear_selection();
+       clip_clear_selection(cbd);
     clip_gen_lose_selection(cbd);
 #ifdef FEAT_X11
     if (visual_selection)
@@ -518,7 +525,8 @@ clip_lose_selection(cbd)
        if (was_owned
                && (get_real_state() == VISUAL
                                            || get_real_state() == SELECTMODE)
-               && clip_isautosel()
+               && (cbd == &clip_star ?
+                               clip_isautosel_star() : clip_isautosel_plus())
                && hl_attr(HLF_V) != hl_attr(HLF_VNC))
        {
            update_curbuf(INVERTED_ALL);
@@ -534,18 +542,18 @@ clip_lose_selection(cbd)
 #endif
 }
 
-    void
-clip_copy_selection()
+    static void
+clip_copy_selection(clip)
+    VimClipboard       *clip;
 {
-    if (VIsual_active && (State & NORMAL) && clip_star.available)
+    if (VIsual_active && (State & NORMAL) && clip->available)
     {
-       if (clip_isautosel())
-           clip_update_selection();
-       clip_free_selection(&clip_star);
-       clip_own_selection(&clip_star);
-       if (clip_star.owned)
-           clip_get_selection(&clip_star);
-       clip_gen_set_selection(&clip_star);
+       clip_update_selection(clip);
+       clip_free_selection(clip);
+       clip_own_selection(clip);
+       if (clip->owned)
+           clip_get_selection(clip);
+       clip_gen_set_selection(clip);
     }
 }
 
@@ -555,21 +563,38 @@ clip_copy_selection()
     void
 clip_auto_select()
 {
-    if (clip_isautosel())
-       clip_copy_selection();
+    if (clip_isautosel_star())
+       clip_copy_selection(&clip_star);
+    if (clip_isautosel_plus())
+       clip_copy_selection(&clip_plus);
 }
 
 /*
- * Return TRUE if automatic selection of Visual area is desired.
+ * Return TRUE if automatic selection of Visual area is desired for the *
+ * register.
  */
     int
-clip_isautosel()
+clip_isautosel_star()
 {
     return (
 #ifdef FEAT_GUI
            gui.in_use ? (vim_strchr(p_go, GO_ASEL) != NULL) :
 #endif
-           clip_autoselect);
+           clip_autoselect_star);
+}
+
+/*
+ * Return TRUE if automatic selection of Visual area is desired for the +
+ * register.
+ */
+    int
+clip_isautosel_plus()
+{
+    return (
+#ifdef FEAT_GUI
+           gui.in_use ? (vim_strchr(p_go, GO_ASELPLUS) != NULL) :
+#endif
+           clip_autoselect_plus);
 }
 
 
@@ -657,7 +682,7 @@ clip_start_selection(col, row, repeated_click)
     VimClipboard       *cb = &clip_star;
 
     if (cb->state == SELECT_DONE)
-       clip_clear_selection();
+       clip_clear_selection(cb);
 
     row = check_row(row);
     col = check_col(col);
@@ -749,7 +774,7 @@ clip_process_selection(button, col, row, repeated_click)
        printf("Selection ended: (%u,%u) to (%u,%u)\n", cb->start.lnum,
                cb->start.col, cb->end.lnum, cb->end.col);
 #endif
-       if (clip_isautosel()
+       if (clip_isautosel_star()
                || (
 #ifdef FEAT_GUI
                    gui.in_use ? (vim_strchr(p_go, GO_ASELML) != NULL) :
@@ -932,16 +957,16 @@ clip_may_redraw_selection(row, col, len)
  * Called from outside to clear selected region from the display
  */
     void
-clip_clear_selection()
+clip_clear_selection(cbd)
+    VimClipboard    *cbd;
 {
-    VimClipboard    *cb = &clip_star;
 
-    if (cb->state == SELECT_CLEARED)
+    if (cbd->state == SELECT_CLEARED)
        return;
 
-    clip_invert_area((int)cb->start.lnum, cb->start.col, (int)cb->end.lnum,
-                                                    cb->end.col, CLIP_CLEAR);
-    cb->state = SELECT_CLEARED;
+    clip_invert_area((int)cbd->start.lnum, cbd->start.col, (int)cbd->end.lnum,
+                                                    cbd->end.col, CLIP_CLEAR);
+    cbd->state = SELECT_CLEARED;
 }
 
 /*
@@ -954,7 +979,7 @@ clip_may_clear_selection(row1, row2)
     if (clip_star.state == SELECT_DONE
            && row2 >= clip_star.start.lnum
            && row1 <= clip_star.end.lnum)
-       clip_clear_selection();
+       clip_clear_selection(&clip_star);
 }
 
 /*
index 80abb73ee965a142795ac9318455295fb28d18df..afd4d7cc3b7e577f2e7abdfe945c01a42e0604ea 100644 (file)
@@ -714,6 +714,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    597,
 /**/
     596,
 /**/