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
"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
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
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.
# 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);
}
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. */
* 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
* 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
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);
#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 */
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));
# 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
#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);
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
}
|| (wp != NULL && wp->w_width != Columns)
# endif
)
- clip_clear_selection();
+ clip_clear_selection(&clip_star);
else
clip_scroll_selection(-line_count);
#endif
|| (wp != NULL && wp->w_width != Columns)
# endif
)
- clip_clear_selection();
+ clip_clear_selection(&clip_star);
else
clip_scroll_selection(line_count);
#endif
#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.
* 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))
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);
}
}
}
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,
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);
}
#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)
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);
#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);
}
}
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);
}
VimClipboard *cb = &clip_star;
if (cb->state == SELECT_DONE)
- clip_clear_selection();
+ clip_clear_selection(cb);
row = check_row(row);
col = check_col(col);
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) :
* 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;
}
/*
if (clip_star.state == SELECT_DONE
&& row2 >= clip_star.start.lnum
&& row1 <= clip_star.end.lnum)
- clip_clear_selection();
+ clip_clear_selection(&clip_star);
}
/*
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 597,
/**/
596,
/**/