# HG changeset patch # User Bram Moolenaar # Date 1422364177 -3600 # Node ID b01ca71f93b293ba93489bc2320c12caf61bf289 # Parent f52b5c1d7bb0f4cc8c047120f1c9815b7f4a8906 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) diff --git a/src/main.c b/src/main.c --- a/src/main.c +++ b/src/main.c @@ -959,17 +959,8 @@ vim_main2(int argc UNUSED, char **argv U if (p_im) 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 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"); #endif diff --git a/src/testdir/test_eval.in b/src/testdir/test_eval.in --- a/src/testdir/test_eval.in +++ b/src/testdir/test_eval.in @@ -1,7 +1,6 @@ Test for various eval features. vim: set ft=vim : -Note: system clipboard support is not tested. I do not think anybody will thank -me for messing with clipboard. +Note: system clipboard is saved, changed and restored. STARTTEST :so small.vim @@ -122,7 +121,19 @@ call SetReg('/', ['abc/']) call SetReg('/', ["abc/\n"]) call SetReg('=', ['"abc/"']) 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' call ErrExe('call setreg()') call ErrExe('call setreg(1)') diff --git a/src/testdir/test_eval.ok b/src/testdir/test_eval.ok index 59112d028e72a937287ae2d2b7e60a0a03bd4493..5e8d2cc4f6f0caa2b4386ceec8b3addb70c419a2 GIT binary patch literal 11538 zc%02zOK+n{5ax`u*PL74gA;9LY{2vK$_GD_NTa#TYA#U@fU)Bh#unhrMA82D?N{{! z3gRTQlg%MOb=CJ(cUM(+V;&wJJd!3QDU+fs+|H1c_xpt0{Ymb^^pFfm7{%oDx=SzJ zo3nG0{MhFep)&er8ab$y^O)Ihpz)h+Xvy8tac*|#V~2_P4KsXT-JOKRCMHEv=E++2 zo63DDIqinsbHb3u>>78^+z_K1OTMw~s3~?wBX`8^M>atu2`21%M+qW~U?PzwHi0Py zf=PuSmIPCFO({W)jrA19bZRqLaz?>!+127$N{$)3exn>qjAI5^Gn>PbOO9EMBas|) zc8w@UA~{Y5Cdpi4&20`-3?ntKFsvlQf?ZE2!wO|sNT`L)V2XiZQDIn1h6~;YuTMGF zz~S{xk_(A;VUw6*Ah{s?uR?VzsV;eEIMppqbty3~Z7Nd?RF^2#m880&99LNMUP-7c zo52(V!_`RS<#@kOvgIaQlY;(B6OwMSq#)lnXq&5@Esd4&TN@~lYtn4jGvzFSSNJr*P zj;J7-V?iVt_47HA8H>!@9nGO~AB&01>H z<#I`FBk|?)quU3kaq0HeDqLLv?G{*;{n{{01c4la30k)m)`XYHN-3+isscsnknDCE ztBdcbl7TQ`%}`Bzx7M?n>RD>!roHvoh%Uc`kF1)_b9`3O9D(bx`0%^Rrfbq4p~~Fw zT%Y;m)_q!OpO`Z%)R`)J)dQ>@Xo1qKx{t>5SjTg$0vbQ31ddSC;VVxTLG=vRuBk)b z6|&~YPetg5EwL~3j6jzg$snyIL#wLJ4k1E!Y%;=c`nm9sHCxzT~1yMC` zS~Ybd$-M{_*UP_53BCg23jk-K8bYmc(9pSnZxvK932iK-;I4Weexj+`WT?OtP0i7ns`UcjeL%#C zi$1-Wkq39x1J6@!Vc!zCGIm7^x`~m|7O5p@hUS(IP@#^6Dcn^LA5Sz@Clbg$7VqL3 zwN%>2x4PG2Ps8Id_0@bGmnx1U?H&ny*f}Yd)+Bm9YEybSuGDErG)Kp||Fm=y&N939 z>@j>5ByEZKe9)#86(hiu&}4OV&iE?k)q3)wHD?|9?6)VN;j3V2P3C8V8mpACOc9yu z!~v0yCB36l?pu}ttCtu#avZnuobu)K zkq4H+o4%F3gEv0Ecf>=WM(t%O zW0o$MxiyiGGhkV`IHbA_90Uvs+e_TBO6V)l zt76MgWQFDSt}=EJ%f=J$Ahn%g0__ZY3XGNk2w`fPf6`^ZvZQiIbsIPcnA%Cb#2>4= zzXm^S_ZWzn8)5D$TNg1zf6x{+cM#d$FoE`lJq1R~0E93*k?~{riTBA`M;NrM@*Gs% z1`YxTi@-}9veuhdpjYb>L$MbgxzKPl`UF@?Y9b-8S{UJc5P5yuJ0a5kiRZv-9q0x% zYy9_e^?`x?d%2_$;{^o9L*O((!&}Fnuu zEeW$F?`KjJn_X7@F81sZGsWO_Z`6eDG{ZyL;yNaQ)u1Sx3de|Z zuy2xjoyM=3us#SA_@Jo=Uo@e}P75^ZzqC^5j{ack>wQrsTN0<6eY6YnrTa&1?fEMy zO0wGJ^f}+`4h2bQ16d_ud7#tymgf82W;7s*yyhgSzOW#A4=N>MDIU<6mP`O$)JM$ zkp|UnN48;h|2*Vtx|aAB=!c*`BnS3M6ZuRJP$Vo!NWPXi6*PPI@J|K91B}^*yAkI1 z$05;vUf;aXp-!(uQ92&|-|;&(+Q*Lp8xmf)_hDHkc~&XlG=kQYC&}rs-jj?@UA)W6 zaFdbp`;O3|-O}(9AA2?Nk6xGGW9*EaxpBj;$B!segVc$Y+v;+k|Wn)TAiG zyc9?3kaF)gC9O!*w@xwa49R-PzEhRC^r=l?||MZM>es|e$(5kW6?O4(pPrmgO zoVmr2)!@GqI!)}Q!jSY`<_M|DJ$Dl3#uL}FMOFg8ACjw#R_D#KA%988-=2y}woc0U QkneXzkIpo`xbNM60S}6Z!T 1) + return; clip_unnamed_saved = clip_unnamed; + clipboard_needs_update = FALSE; - if (clip_did_set_selection > 0) + if (clip_did_set_selection) { clip_unnamed = FALSE; clip_did_set_selection = FALSE; @@ -584,22 +589,30 @@ start_global_changes() void 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_unnamed = clip_unnamed_saved; - if (clip_unnamed & CLIP_UNNAMED) + clip_unnamed_saved = FALSE; + if (clipboard_needs_update) { - clip_own_selection(&clip_star); - clip_gen_set_selection(&clip_star); - } - if (clip_unnamed & CLIP_UNNAMED_PLUS) - { - clip_own_selection(&clip_plus); - clip_gen_set_selection(&clip_plus); + /* only store something in the clipboard, + * if we have yanked anything to it */ + if (clip_unnamed & CLIP_UNNAMED) + { + clip_own_selection(&clip_star); + clip_gen_set_selection(&clip_star); + } + 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 * 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)) + || (cbd == &clip_star && (clip_unnamed_saved & CLIP_UNNAMED))) + { + clipboard_needs_update = TRUE; return; - else if (cbd == &clip_star && (clip_unnamed_saved & CLIP_UNNAMED)) - return; + } } #ifdef FEAT_XCLIPBOARD # ifdef FEAT_GUI diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -742,6 +742,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 598, +/**/ 597, /**/ 596,