diff --git a/7.3.597 b/7.3.597 new file mode 100644 index 0000000..2a4f0b3 --- /dev/null +++ b/7.3.597 @@ -0,0 +1,720 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.3.597 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.3.597 +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'. +Files: runtime/doc/options.txt, src/normal.c, src/ops.c, src/screen.c, + src/ui.c, src/globals.h, src/proto/ui.pro, src/option.h, src/gui.c + + +*** ../vim-7.3.596/runtime/doc/options.txt 2012-02-20 22:18:23.000000000 +0100 +--- runtime/doc/options.txt 2012-07-10 15:40:35.000000000 +0200 +*************** +*** 1437,1442 **** +--- 1452,1458 ---- + 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 +*************** +*** 1446,1460 **** + 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 +--- 1462,1478 ---- + explicitly accessed using the "* notation. Also see + |gui-clipboard|. + ++ *clipboard-unnamedplus* + 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') + < ++ *clipboard-autoselect* + 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 +*************** +*** 1466,1474 **** +--- 1484,1499 ---- + "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 +*************** +*** 1479,1484 **** +--- 1504,1510 ---- + 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 +*************** +*** 3547,3552 **** +--- 3600,3608 ---- + 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. +*** ../vim-7.3.596/src/normal.c 2012-06-29 13:56:01.000000000 +0200 +--- src/normal.c 2012-07-10 15:44:24.000000000 +0200 +*************** +*** 1451,1457 **** + * 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 + && oap->op_type != OP_NOP + && !gui_yank + # ifdef FEAT_VISUAL +--- 1451,1457 ---- + * 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 || clip_plus.available) + && oap->op_type != OP_NOP + && !gui_yank + # ifdef FEAT_VISUAL +*** ../vim-7.3.596/src/ops.c 2012-06-29 13:34:15.000000000 +0200 +--- src/ops.c 2012-07-10 16:20:29.000000000 +0200 +*************** +*** 962,969 **** + * selection too. */ + if (name == '*' && clip_star.available) + { +! if (clip_isautosel()) +! clip_update_selection(); + may_get_selection(name); + } + #endif +--- 962,975 ---- + * selection too. */ + if (name == '*' && clip_star.available) + { +! 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,3196 **** + + clip_own_selection(&clip_plus); + clip_gen_set_selection(&clip_plus); +! if (!clip_isautosel() && !did_star && curr == &(y_regs[PLUS_REGISTER])) + { + copy_yank_reg(&(y_regs[STAR_REGISTER])); + clip_own_selection(&clip_star); +--- 3196,3203 ---- + + clip_own_selection(&clip_plus); + clip_gen_set_selection(&clip_plus); +! if (!clip_isautosel_star() && !did_star +! && curr == &(y_regs[PLUS_REGISTER])) + { + copy_yank_reg(&(y_regs[STAR_REGISTER])); + clip_own_selection(&clip_star); +*** ../vim-7.3.596/src/screen.c 2012-06-13 18:06:32.000000000 +0200 +--- src/screen.c 2012-07-10 16:39:01.000000000 +0200 +*************** +*** 519,526 **** + # endif + # ifdef FEAT_CLIPBOARD + /* When Visual area changed, may have to update selection. */ +! if (clip_star.available && clip_isautosel()) +! clip_update_selection(); + # endif + #ifdef FEAT_GUI + /* Remove the cursor before starting to do anything, because +--- 519,528 ---- + # endif + # ifdef FEAT_CLIPBOARD + /* When Visual area changed, may have to 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,821 **** + + #ifdef FEAT_CLIPBOARD + /* When Visual area changed, may have to update selection. */ +! if (clip_star.available && clip_isautosel()) +! clip_update_selection(); + #endif + + win_update(wp); +--- 816,825 ---- + + #ifdef FEAT_CLIPBOARD + /* When Visual area changed, may have to 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,3006 **** + area_highlighting = TRUE; + attr = hl_attr(HLF_V); + #if defined(FEAT_CLIPBOARD) && defined(FEAT_X11) +! if (clip_star.available && !clip_star.owned && clip_isautosel()) + attr = hl_attr(HLF_VNC); + #endif + } +--- 3004,3013 ---- + area_highlighting = TRUE; + attr = hl_attr(HLF_V); + #if defined(FEAT_CLIPBOARD) && defined(FEAT_X11) +! 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,9066 **** + || (wp != NULL && wp->w_width != Columns) + # endif + ) +! clip_clear_selection(); + else + clip_scroll_selection(-line_count); + #endif +--- 9067,9073 ---- + || (wp != NULL && wp->w_width != Columns) + # endif + ) +! clip_clear_selection(&clip_star); + else + clip_scroll_selection(-line_count); + #endif +*************** +*** 9281,9287 **** + || (wp != NULL && wp->w_width != Columns) + # endif + ) +! clip_clear_selection(); + else + clip_scroll_selection(line_count); + #endif +--- 9288,9294 ---- + || (wp != NULL && wp->w_width != Columns) + # endif + ) +! clip_clear_selection(&clip_star); + else + clip_scroll_selection(line_count); + #endif +*** ../vim-7.3.596/src/ui.c 2012-02-12 01:35:06.000000000 +0100 +--- src/ui.c 2012-07-10 16:43:17.000000000 +0200 +*************** +*** 381,386 **** +--- 381,388 ---- + + #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,431 **** + * this is called whenever VIsual mode is ended. + */ + void +! clip_update_selection() + { +! 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)) +--- 425,434 ---- + * this is called whenever VIsual mode is ended. + */ + void +! clip_update_selection(clip) +! VimClipboard *clip; + { +! 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,460 **** + start = curwin->w_cursor; + end = VIsual; + } +! if (!equalpos(clip_star.start, start) +! || !equalpos(clip_star.end, end) +! || clip_star.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); + } + } + } +--- 447,463 ---- + start = curwin->w_cursor; + end = VIsual; + } +! if (!equalpos(clip->start, start) +! || !equalpos(clip->end, end) +! || clip->vmode != VIsual_mode) + { +! 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,481 **** + int was_owned = cbd->owned; + + cbd->owned = (clip_gen_own_selection(cbd) == OK); +! if (!was_owned && cbd == &clip_star) + { + /* May have to show a different kind of highlighting for the + * selected area. There is no specific redraw command for this, +--- 478,484 ---- + int was_owned = cbd->owned; + + cbd->owned = (clip_gen_own_selection(cbd) == OK); +! 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,489 **** + if (cbd->owned + && (get_real_state() == VISUAL + || get_real_state() == SELECTMODE) +! && clip_isautosel() + && hl_attr(HLF_V) != hl_attr(HLF_VNC)) + redraw_curbuf_later(INVERTED_ALL); + } +--- 486,493 ---- + if (cbd->owned + && (get_real_state() == VISUAL + || get_real_state() == SELECTMODE) +! && (cbd == &clip_star ? clip_isautosel_star() +! : clip_isautosel_plus()) + && hl_attr(HLF_V) != hl_attr(HLF_VNC)) + redraw_curbuf_later(INVERTED_ALL); + } +*************** +*** 502,513 **** + #ifdef FEAT_X11 + int was_owned = cbd->owned; + #endif +! int visual_selection = (cbd == &clip_star); + + clip_free_selection(cbd); + cbd->owned = FALSE; + if (visual_selection) +! clip_clear_selection(); + clip_gen_lose_selection(cbd); + #ifdef FEAT_X11 + if (visual_selection) +--- 506,520 ---- + #ifdef FEAT_X11 + int was_owned = cbd->owned; + #endif +! 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(cbd); + clip_gen_lose_selection(cbd); + #ifdef FEAT_X11 + if (visual_selection) +*************** +*** 518,524 **** + if (was_owned + && (get_real_state() == VISUAL + || get_real_state() == SELECTMODE) +! && clip_isautosel() + && hl_attr(HLF_V) != hl_attr(HLF_VNC)) + { + update_curbuf(INVERTED_ALL); +--- 525,532 ---- + if (was_owned + && (get_real_state() == VISUAL + || get_real_state() == SELECTMODE) +! && (cbd == &clip_star ? +! clip_isautosel_star() : clip_isautosel_plus()) + && hl_attr(HLF_V) != hl_attr(HLF_VNC)) + { + update_curbuf(INVERTED_ALL); +*************** +*** 534,551 **** + #endif + } + +! void +! clip_copy_selection() +! { +! if (VIsual_active && (State & NORMAL) && clip_star.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); + } + } + +--- 542,559 ---- + #endif + } + +! static void +! clip_copy_selection(clip) +! VimClipboard *clip; +! { +! if (VIsual_active && (State & NORMAL) && clip->available) +! { +! 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,575 **** + void + clip_auto_select() + { +! if (clip_isautosel()) +! clip_copy_selection(); + } + + /* +! * Return TRUE if automatic selection of Visual area is desired. + */ + int +! clip_isautosel() + { + return ( + #ifdef FEAT_GUI + gui.in_use ? (vim_strchr(p_go, GO_ASEL) != NULL) : + #endif +! clip_autoselect); + } + + +--- 563,600 ---- + void + clip_auto_select() + { +! 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 for the * +! * register. + */ + int +! clip_isautosel_star() + { + return ( + #ifdef FEAT_GUI + gui.in_use ? (vim_strchr(p_go, GO_ASEL) != NULL) : + #endif +! 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,663 **** + VimClipboard *cb = &clip_star; + + if (cb->state == SELECT_DONE) +! clip_clear_selection(); + + row = check_row(row); + col = check_col(col); +--- 682,688 ---- + VimClipboard *cb = &clip_star; + + if (cb->state == SELECT_DONE) +! clip_clear_selection(cb); + + row = check_row(row); + col = check_col(col); +*************** +*** 749,755 **** + 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() + || ( + #ifdef FEAT_GUI + gui.in_use ? (vim_strchr(p_go, GO_ASELML) != NULL) : +--- 774,780 ---- + 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_star() + || ( + #ifdef FEAT_GUI + gui.in_use ? (vim_strchr(p_go, GO_ASELML) != NULL) : +*************** +*** 932,947 **** + * Called from outside to clear selected region from the display + */ + void +! clip_clear_selection() + { +- VimClipboard *cb = &clip_star; + +! if (cb->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; + } + + /* +--- 957,972 ---- + * Called from outside to clear selected region from the display + */ + void +! clip_clear_selection(cbd) +! VimClipboard *cbd; + { + +! if (cbd->state == SELECT_CLEARED) + return; + +! clip_invert_area((int)cbd->start.lnum, cbd->start.col, (int)cbd->end.lnum, +! cbd->end.col, CLIP_CLEAR); +! cbd->state = SELECT_CLEARED; + } + + /* +*************** +*** 954,960 **** + if (clip_star.state == SELECT_DONE + && row2 >= clip_star.start.lnum + && row1 <= clip_star.end.lnum) +! clip_clear_selection(); + } + + /* +--- 979,985 ---- + if (clip_star.state == SELECT_DONE + && row2 >= clip_star.start.lnum + && row1 <= clip_star.end.lnum) +! clip_clear_selection(&clip_star); + } + + /* +*** ../vim-7.3.596/src/globals.h 2012-06-29 12:35:40.000000000 +0200 +--- src/globals.h 2012-07-10 16:35:13.000000000 +0200 +*************** +*** 517,523 **** + # 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); + EXTERN regprog_T *clip_exclude_prog INIT(= NULL); +--- 517,524 ---- + # define CLIP_UNNAMED_PLUS 2 + EXTERN int clip_unnamed INIT(= 0); /* above two values or'ed */ + +! 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); +*** ../vim-7.3.596/src/proto/ui.pro 2010-08-15 21:57:28.000000000 +0200 +--- src/proto/ui.pro 2012-07-10 16:37:35.000000000 +0200 +*************** +*** 11,27 **** + 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_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)); + 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_may_clear_selection __ARGS((int row1, int row2)); + void clip_scroll_selection __ARGS((int rows)); + void clip_copy_modeless_selection __ARGS((int both)); +--- 11,27 ---- + void ui_new_shellsize __ARGS((void)); + void ui_breakcheck __ARGS((void)); + void clip_init __ARGS((int can_use)); +! void clip_update_selection __ARGS((VimClipboard *clip)); + void clip_own_selection __ARGS((VimClipboard *cbd)); + void clip_lose_selection __ARGS((VimClipboard *cbd)); + void clip_auto_select __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((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)); +*** ../vim-7.3.596/src/option.h 2012-06-06 16:12:54.000000000 +0200 +--- src/option.h 2012-07-10 15:54:32.000000000 +0200 +*************** +*** 229,234 **** +--- 229,235 ---- + #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 */ +*** ../vim-7.3.596/src/gui.c 2012-05-27 00:37:45.000000000 +0200 +--- src/gui.c 2012-07-10 16:43:34.000000000 +0200 +*************** +*** 3154,3160 **** + } + + if (clip_star.state != SELECT_CLEARED && !did_clip) +! clip_clear_selection(); + #endif + + /* Don't put events in the input queue now. */ +--- 3154,3160 ---- + } + + if (clip_star.state != SELECT_CLEARED && !did_clip) +! clip_clear_selection(&clip_star); + #endif + + /* Don't put events in the input queue now. */ +*** ../vim-7.3.596/src/version.c 2012-07-10 15:18:18.000000000 +0200 +--- src/version.c 2012-07-10 16:32:16.000000000 +0200 +*************** +*** 716,717 **** +--- 716,719 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 597, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +106. When told to "go to your room" you inform your parents that you + can't...because you were kicked out and banned. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ an exciting new programming language -- http://www.Zimbu.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org ///