changeset 11273:96d83cd2904a v8.0.0522

patch 8.0.0522: Win32: when 'clipboard' is "unnamed" yyp does not work commit https://github.com/vim/vim/commit/3fcfa35f82b9d1ef5e95051b3a45578e10c14ec3 Author: Bram Moolenaar <Bram@vim.org> 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.
author Christian Brabandt <cb@256bit.org>
date Wed, 29 Mar 2017 19:30:06 +0200
parents 6e4f21c7f07e
children 8098a825f007
files src/Makefile src/globals.h src/ops.c src/proto/ui.pro src/testdir/test_alot.vim src/testdir/test_global.vim src/ui.c src/version.c
diffstat 8 files changed, 31 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- 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 \
--- 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
 
--- 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);
 
--- 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);
--- 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
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
--- 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;
 }
 
 /*
--- 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,