vim-patch:7.4.901

Problem:    When a BufLeave autocommand changes folding in a way it syncs
            undo, undo can be corrupted.
Solution:   Prevent undo sync. (Jacob Niehus)

e7d1376b63

---

see: "[bug] [patch] Setting foldmethod in WinLeave autocommand can corrupt undo state"
     https://groups.google.com/d/msg/vim_dev/xF5uMLb1vwY/Jn4RglosDgAJ
This commit is contained in:
watiko
2016-02-15 22:15:53 +09:00
parent 7609a96a35
commit 4a4c3fdfcd
2 changed files with 9 additions and 1 deletions

View File

@@ -545,7 +545,11 @@ static int pum_set_selected(int n, int repeat)
g_do_tagpreview = (int)p_pvh; g_do_tagpreview = (int)p_pvh;
} }
RedrawingDisabled++; RedrawingDisabled++;
// Prevent undo sync here, if an autocommand syncs undo weird
// things can happen to the undo tree.
no_u_sync++;
resized = prepare_tagpreview(false); resized = prepare_tagpreview(false);
no_u_sync--;
RedrawingDisabled--; RedrawingDisabled--;
g_do_tagpreview = 0; g_do_tagpreview = 0;
@@ -629,7 +633,9 @@ static int pum_set_selected(int n, int repeat)
// the window when needed, otherwise it will always be // the window when needed, otherwise it will always be
// redraw. // redraw.
if (resized) { if (resized) {
no_u_sync++;
win_enter(curwin_save, true); win_enter(curwin_save, true);
no_u_sync--;
update_topline(); update_topline();
} }
@@ -640,7 +646,9 @@ static int pum_set_selected(int n, int repeat)
pum_do_redraw = FALSE; pum_do_redraw = FALSE;
if (!resized && win_valid(curwin_save)) { if (!resized && win_valid(curwin_save)) {
no_u_sync++;
win_enter(curwin_save, true); win_enter(curwin_save, true);
no_u_sync--;
} }
// May need to update the screen again when there are // May need to update the screen again when there are

View File

@@ -387,7 +387,7 @@ static int included_patches[] = {
// 904, // 904,
// 903, // 903,
// 902 NA // 902 NA
// 901, 901,
// 900 NA // 900 NA
// 899 NA // 899 NA
898, 898,