Mercurial > vim
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; } /*