mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
updated for version 7.4.598
Problem: ":tabdo windo echo 'hi'" causes "* register not to be changed. (Salman Halim) Solution: Change how clip_did_set_selection is used and add clipboard_needs_update and global_change_count. (Christian Brabandt)
This commit is contained in:
@@ -959,17 +959,8 @@ vim_main2(int argc UNUSED, char **argv UNUSED)
|
|||||||
if (p_im)
|
if (p_im)
|
||||||
need_start_insertmode = TRUE;
|
need_start_insertmode = TRUE;
|
||||||
|
|
||||||
#ifdef FEAT_CLIPBOARD
|
|
||||||
if (clip_unnamed)
|
|
||||||
/* do not overwrite system clipboard while starting up */
|
|
||||||
clip_did_set_selection = -1;
|
|
||||||
#endif
|
|
||||||
#ifdef FEAT_AUTOCMD
|
#ifdef FEAT_AUTOCMD
|
||||||
apply_autocmds(EVENT_VIMENTER, NULL, NULL, FALSE, curbuf);
|
apply_autocmds(EVENT_VIMENTER, NULL, NULL, FALSE, curbuf);
|
||||||
# ifdef FEAT_CLIPBOARD
|
|
||||||
if (clip_did_set_selection < 0)
|
|
||||||
clip_did_set_selection = TRUE;
|
|
||||||
# endif
|
|
||||||
TIME_MSG("VimEnter autocommands");
|
TIME_MSG("VimEnter autocommands");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -1,7 +1,6 @@
|
|||||||
Test for various eval features. vim: set ft=vim :
|
Test for various eval features. vim: set ft=vim :
|
||||||
|
|
||||||
Note: system clipboard support is not tested. I do not think anybody will thank
|
Note: system clipboard is saved, changed and restored.
|
||||||
me for messing with clipboard.
|
|
||||||
|
|
||||||
STARTTEST
|
STARTTEST
|
||||||
:so small.vim
|
:so small.vim
|
||||||
@@ -122,7 +121,19 @@ call SetReg('/', ['abc/'])
|
|||||||
call SetReg('/', ["abc/\n"])
|
call SetReg('/', ["abc/\n"])
|
||||||
call SetReg('=', ['"abc/"'])
|
call SetReg('=', ['"abc/"'])
|
||||||
call SetReg('=', ["\"abc/\n\""])
|
call SetReg('=', ["\"abc/\n\""])
|
||||||
|
$put ='{{{1 System clipboard'
|
||||||
|
" Save and restore system clipboard.
|
||||||
|
" If no connection to X-Server is possible, test should succeed.
|
||||||
|
:let _clipreg = ['+', getreg('+'), getregtype('+')]
|
||||||
|
:let _clipopt = &cb
|
||||||
|
:let &cb='unnamedplus'
|
||||||
|
:1y
|
||||||
|
:AR +
|
||||||
|
:tabdo :windo :echo "hi"
|
||||||
|
:3y
|
||||||
|
:AR +
|
||||||
|
:let &cb=_clipopt
|
||||||
|
:call call('setreg', _clipreg)
|
||||||
$put ='{{{1 Errors'
|
$put ='{{{1 Errors'
|
||||||
call ErrExe('call setreg()')
|
call ErrExe('call setreg()')
|
||||||
call ErrExe('call setreg(1)')
|
call ErrExe('call setreg(1)')
|
||||||
|
Binary file not shown.
43
src/ui.c
43
src/ui.c
@@ -73,6 +73,8 @@ ui_write(s, len)
|
|||||||
static char_u *ta_str = NULL;
|
static char_u *ta_str = NULL;
|
||||||
static int ta_off; /* offset for next char to use when ta_str != NULL */
|
static int ta_off; /* offset for next char to use when ta_str != NULL */
|
||||||
static int ta_len; /* length of ta_str when it's not NULL*/
|
static int ta_len; /* length of ta_str when it's not NULL*/
|
||||||
|
static int clipboard_needs_update; /* clipboard needs to be updated */
|
||||||
|
static int global_change_count = 0; /* if set, inside a start_global_changes */
|
||||||
|
|
||||||
void
|
void
|
||||||
ui_inchar_undo(s, len)
|
ui_inchar_undo(s, len)
|
||||||
@@ -569,9 +571,12 @@ clip_copy_selection(clip)
|
|||||||
void
|
void
|
||||||
start_global_changes()
|
start_global_changes()
|
||||||
{
|
{
|
||||||
|
if (++global_change_count > 1)
|
||||||
|
return;
|
||||||
clip_unnamed_saved = clip_unnamed;
|
clip_unnamed_saved = clip_unnamed;
|
||||||
|
clipboard_needs_update = FALSE;
|
||||||
|
|
||||||
if (clip_did_set_selection > 0)
|
if (clip_did_set_selection)
|
||||||
{
|
{
|
||||||
clip_unnamed = FALSE;
|
clip_unnamed = FALSE;
|
||||||
clip_did_set_selection = FALSE;
|
clip_did_set_selection = FALSE;
|
||||||
@@ -584,22 +589,30 @@ start_global_changes()
|
|||||||
void
|
void
|
||||||
end_global_changes()
|
end_global_changes()
|
||||||
{
|
{
|
||||||
if (clip_did_set_selection == FALSE) /* not when -1 */
|
if (--global_change_count > 0)
|
||||||
|
/* recursive */
|
||||||
|
return;
|
||||||
|
if (!clip_did_set_selection)
|
||||||
{
|
{
|
||||||
clip_did_set_selection = TRUE;
|
clip_did_set_selection = TRUE;
|
||||||
clip_unnamed = clip_unnamed_saved;
|
clip_unnamed = clip_unnamed_saved;
|
||||||
if (clip_unnamed & CLIP_UNNAMED)
|
clip_unnamed_saved = FALSE;
|
||||||
|
if (clipboard_needs_update)
|
||||||
{
|
{
|
||||||
clip_own_selection(&clip_star);
|
/* only store something in the clipboard,
|
||||||
clip_gen_set_selection(&clip_star);
|
* if we have yanked anything to it */
|
||||||
}
|
if (clip_unnamed & CLIP_UNNAMED)
|
||||||
if (clip_unnamed & CLIP_UNNAMED_PLUS)
|
{
|
||||||
{
|
clip_own_selection(&clip_star);
|
||||||
clip_own_selection(&clip_plus);
|
clip_gen_set_selection(&clip_star);
|
||||||
clip_gen_set_selection(&clip_plus);
|
}
|
||||||
|
if (clip_unnamed & CLIP_UNNAMED_PLUS)
|
||||||
|
{
|
||||||
|
clip_own_selection(&clip_plus);
|
||||||
|
clip_gen_set_selection(&clip_plus);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
clip_unnamed_saved = FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1477,10 +1490,12 @@ clip_gen_set_selection(cbd)
|
|||||||
{
|
{
|
||||||
/* Updating postponed, so that accessing the system clipboard won't
|
/* Updating postponed, so that accessing the system clipboard won't
|
||||||
* hang Vim when accessing it many times (e.g. on a :g comand). */
|
* hang Vim when accessing it many times (e.g. on a :g comand). */
|
||||||
if (cbd == &clip_plus && (clip_unnamed_saved & CLIP_UNNAMED_PLUS))
|
if ((cbd == &clip_plus && (clip_unnamed_saved & CLIP_UNNAMED_PLUS))
|
||||||
return;
|
|| (cbd == &clip_star && (clip_unnamed_saved & CLIP_UNNAMED)))
|
||||||
else if (cbd == &clip_star && (clip_unnamed_saved & CLIP_UNNAMED))
|
{
|
||||||
|
clipboard_needs_update = TRUE;
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#ifdef FEAT_XCLIPBOARD
|
#ifdef FEAT_XCLIPBOARD
|
||||||
# ifdef FEAT_GUI
|
# ifdef FEAT_GUI
|
||||||
|
@@ -741,6 +741,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 */
|
||||||
|
/**/
|
||||||
|
598,
|
||||||
/**/
|
/**/
|
||||||
597,
|
597,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user