# HG changeset patch # User Christian Brabandt # Date 1490808606 -7200 # Node ID 96d83cd2904a1ea8763809ff59a7c27bc09f4925 # Parent 6e4f21c7f07e4ba989583ddddb1bf9523e4c4567 patch 8.0.0522: Win32: when 'clipboard' is "unnamed" yyp does not work commit https://github.com/vim/vim/commit/3fcfa35f82b9d1ef5e95051b3a45578e10c14ec3 Author: Bram Moolenaar Date: Wed Mar 29 19:20:41 2017 +0200 patch 8.0.0522: Win32: when 'clipboard' is "unnamed" yyp does not work Problem: MS-Windows: when 'clipboard' is "unnamed" yyp does not work in a :global command. Solution: When setting the clipboard was postponed, do not clear the register. diff --git a/src/Makefile b/src/Makefile --- a/src/Makefile +++ b/src/Makefile @@ -2145,6 +2145,7 @@ test_arglist \ test_ga \ test_gf \ test_glob2regpat \ + test_global \ test_gn \ test_goto \ test_gui \ diff --git a/src/globals.h b/src/globals.h --- a/src/globals.h +++ b/src/globals.h @@ -532,7 +532,6 @@ EXTERN int clip_autoselect_plus INIT(= F EXTERN int clip_autoselectml INIT(= FALSE); EXTERN int clip_html INIT(= FALSE); EXTERN regprog_T *clip_exclude_prog INIT(= NULL); -EXTERN int clip_did_set_selection INIT(= TRUE); EXTERN int clip_unnamed_saved INIT(= 0); #endif diff --git a/src/ops.c b/src/ops.c --- a/src/ops.c +++ b/src/ops.c @@ -6466,7 +6466,7 @@ clip_get_selection(VimClipboard *cbd) VIsual = old_visual; VIsual_mode = old_visual_mode; } - else + else if (!is_clipboard_needs_update()) { clip_free_selection(cbd); diff --git a/src/proto/ui.pro b/src/proto/ui.pro --- a/src/proto/ui.pro +++ b/src/proto/ui.pro @@ -16,6 +16,7 @@ void clip_update_selection(VimClipboard void clip_own_selection(VimClipboard *cbd); void clip_lose_selection(VimClipboard *cbd); void start_global_changes(void); +int is_clipboard_needs_update(void); void end_global_changes(void); void clip_auto_select(void); int clip_isautosel_star(void); diff --git a/src/testdir/test_alot.vim b/src/testdir/test_alot.vim --- a/src/testdir/test_alot.vim +++ b/src/testdir/test_alot.vim @@ -21,8 +21,9 @@ source test_findfile.vim source test_float_func.vim source test_fnamemodify.vim source test_functions.vim +source test_ga.vim source test_glob2regpat.vim -source test_ga.vim +source test_global.vim source test_goto.vim source test_help_tagjump.vim source test_join.vim diff --git a/src/testdir/test_global.vim b/src/testdir/test_global.vim new file mode 100644 --- /dev/null +++ b/src/testdir/test_global.vim @@ -0,0 +1,11 @@ + +func Test_yank_put_clipboard() + new + call setline(1, ['a', 'b', 'c']) + set clipboard=unnamed + g/^/normal yyp + call assert_equal(['a', 'a', 'b', 'b', 'c', 'c'], getline(1, 6)) + + set clipboard& + bwipe! +endfunc diff --git a/src/ui.c b/src/ui.c --- a/src/ui.c +++ b/src/ui.c @@ -392,8 +392,6 @@ ui_breakcheck_force(int force) #if defined(FEAT_CLIPBOARD) || defined(PROTO) -static void clip_copy_selection(VimClipboard *clip); - /* * Selection stuff using Visual mode, for cutting and pasting text to other * windows. @@ -569,7 +567,8 @@ clip_copy_selection(VimClipboard *clip) * considerably. */ static int global_change_count = 0; /* if set, inside a start_global_changes */ -static int clipboard_needs_update; /* clipboard needs to be updated */ +static int clipboard_needs_update = FALSE; /* clipboard needs to be updated */ +static int clip_did_set_selection = TRUE; /* * Save clip_unnamed and reset it. @@ -590,6 +589,16 @@ start_global_changes(void) } /* + * Return TRUE if setting the clipboard was postponed, it already contains the + * right text. + */ + int +is_clipboard_needs_update() +{ + return clipboard_needs_update; +} + +/* * Restore clip_unnamed and set the selection when needed. */ void @@ -619,6 +628,7 @@ end_global_changes(void) } } } + clipboard_needs_update = FALSE; } /* diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -765,6 +765,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 522, +/**/ 521, /**/ 520,