forked from aniani/vim
		
	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.
			
			
This commit is contained in:
		| @@ -2145,6 +2145,7 @@ test_arglist \ | |||||||
| 	test_ga \ | 	test_ga \ | ||||||
| 	test_gf \ | 	test_gf \ | ||||||
| 	test_glob2regpat \ | 	test_glob2regpat \ | ||||||
|  | 	test_global \ | ||||||
| 	test_gn \ | 	test_gn \ | ||||||
| 	test_goto \ | 	test_goto \ | ||||||
| 	test_gui \ | 	test_gui \ | ||||||
|   | |||||||
| @@ -532,7 +532,6 @@ EXTERN int	clip_autoselect_plus INIT(= FALSE); | |||||||
| EXTERN int	clip_autoselectml INIT(= FALSE); | EXTERN int	clip_autoselectml INIT(= FALSE); | ||||||
| EXTERN int	clip_html INIT(= FALSE); | EXTERN int	clip_html INIT(= FALSE); | ||||||
| EXTERN regprog_T *clip_exclude_prog INIT(= NULL); | EXTERN regprog_T *clip_exclude_prog INIT(= NULL); | ||||||
| EXTERN int	clip_did_set_selection INIT(= TRUE); |  | ||||||
| EXTERN int	clip_unnamed_saved INIT(= 0); | EXTERN int	clip_unnamed_saved INIT(= 0); | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|   | |||||||
| @@ -6466,7 +6466,7 @@ clip_get_selection(VimClipboard *cbd) | |||||||
| 	VIsual = old_visual; | 	VIsual = old_visual; | ||||||
| 	VIsual_mode = old_visual_mode; | 	VIsual_mode = old_visual_mode; | ||||||
|     } |     } | ||||||
|     else |     else if (!is_clipboard_needs_update()) | ||||||
|     { |     { | ||||||
| 	clip_free_selection(cbd); | 	clip_free_selection(cbd); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -16,6 +16,7 @@ void clip_update_selection(VimClipboard *clip); | |||||||
| void clip_own_selection(VimClipboard *cbd); | void clip_own_selection(VimClipboard *cbd); | ||||||
| void clip_lose_selection(VimClipboard *cbd); | void clip_lose_selection(VimClipboard *cbd); | ||||||
| void start_global_changes(void); | void start_global_changes(void); | ||||||
|  | int is_clipboard_needs_update(void); | ||||||
| void end_global_changes(void); | void end_global_changes(void); | ||||||
| void clip_auto_select(void); | void clip_auto_select(void); | ||||||
| int clip_isautosel_star(void); | int clip_isautosel_star(void); | ||||||
|   | |||||||
| @@ -21,8 +21,9 @@ source test_findfile.vim | |||||||
| source test_float_func.vim | source test_float_func.vim | ||||||
| source test_fnamemodify.vim | source test_fnamemodify.vim | ||||||
| source test_functions.vim | source test_functions.vim | ||||||
| source test_glob2regpat.vim |  | ||||||
| source test_ga.vim | source test_ga.vim | ||||||
|  | source test_glob2regpat.vim | ||||||
|  | source test_global.vim | ||||||
| source test_goto.vim | source test_goto.vim | ||||||
| source test_help_tagjump.vim | source test_help_tagjump.vim | ||||||
| source test_join.vim | source test_join.vim | ||||||
|   | |||||||
							
								
								
									
										11
									
								
								src/testdir/test_global.vim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								src/testdir/test_global.vim
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||||
							
								
								
									
										16
									
								
								src/ui.c
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								src/ui.c
									
									
									
									
									
								
							| @@ -392,8 +392,6 @@ ui_breakcheck_force(int force) | |||||||
|  |  | ||||||
| #if defined(FEAT_CLIPBOARD) || defined(PROTO) | #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 |  * Selection stuff using Visual mode, for cutting and pasting text to other | ||||||
|  * windows. |  * windows. | ||||||
| @@ -569,7 +567,8 @@ clip_copy_selection(VimClipboard *clip) | |||||||
|  * considerably. |  * considerably. | ||||||
|  */ |  */ | ||||||
| static int global_change_count = 0; /* if set, inside a start_global_changes */ | 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. |  * Save clip_unnamed and reset it. | ||||||
| @@ -589,6 +588,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. |  * Restore clip_unnamed and set the selection when needed. | ||||||
|  */ |  */ | ||||||
| @@ -619,6 +628,7 @@ end_global_changes(void) | |||||||
| 	    } | 	    } | ||||||
| 	} | 	} | ||||||
|     } |     } | ||||||
|  |     clipboard_needs_update = FALSE; | ||||||
| } | } | ||||||
|  |  | ||||||
| /* | /* | ||||||
|   | |||||||
| @@ -764,6 +764,8 @@ static char *(features[]) = | |||||||
|  |  | ||||||
| static int included_patches[] = | static int included_patches[] = | ||||||
| {   /* Add new patch number below this line */ | {   /* Add new patch number below this line */ | ||||||
|  | /**/ | ||||||
|  |     522, | ||||||
| /**/ | /**/ | ||||||
|     521, |     521, | ||||||
| /**/ | /**/ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user