0
0
mirror of https://github.com/vim/vim.git synced 2025-09-25 03:54:15 -04:00

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:
Bram Moolenaar
2017-03-29 19:20:41 +02:00
parent 99a6e8dd82
commit 3fcfa35f82
8 changed files with 31 additions and 6 deletions

View File

@@ -2145,6 +2145,7 @@ test_arglist \
test_ga \
test_gf \
test_glob2regpat \
test_global \
test_gn \
test_goto \
test_gui \

View File

@@ -532,7 +532,6 @@ 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);
EXTERN int clip_did_set_selection INIT(= TRUE);
EXTERN int clip_unnamed_saved INIT(= 0);
#endif

View File

@@ -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);

View File

@@ -16,6 +16,7 @@ void clip_update_selection(VimClipboard *clip);
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);

View File

@@ -21,8 +21,9 @@ source test_findfile.vim
source test_float_func.vim
source test_fnamemodify.vim
source test_functions.vim
source test_glob2regpat.vim
source test_ga.vim
source test_glob2regpat.vim
source test_global.vim
source test_goto.vim
source test_help_tagjump.vim
source test_join.vim

View 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

View File

@@ -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.
@@ -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.
*/
@@ -619,6 +628,7 @@ end_global_changes(void)
}
}
}
clipboard_needs_update = FALSE;
}
/*

View File

@@ -764,6 +764,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
522,
/**/
521,
/**/