diff --git a/7.4.645 b/7.4.645 new file mode 100644 index 0000000..58e8f05 --- /dev/null +++ b/7.4.645 @@ -0,0 +1,101 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.645 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.4.645 +Problem: When splitting the window in a BufAdd autocommand while still in + the first, empty buffer the window count is wrong. +Solution: Do not reset b_nwindows to zero and don't increment it. +Files: src/buffer.c, src/ex_cmds.c + + +*** ../vim-7.4.644/src/buffer.c 2015-01-27 18:43:42.134535513 +0100 +--- src/buffer.c 2015-02-27 19:33:51.325459521 +0100 +*************** +*** 1794,1800 **** + if (aborting()) /* autocmds may abort script processing */ + return NULL; + #endif +- /* buf->b_nwindows = 0; why was this here? */ + free_buffer_stuff(buf, FALSE); /* delete local variables et al. */ + + /* Init the options. */ +--- 1794,1799 ---- +*************** +*** 1872,1877 **** +--- 1871,1879 ---- + #ifdef FEAT_AUTOCMD + if (!(flags & BLN_DUMMY)) + { ++ /* Tricky: these autocommands may change the buffer list. They could ++ * also split the window with re-using the one empty buffer. This may ++ * result in unexpectedly losing the empty buffer. */ + apply_autocmds(EVENT_BUFNEW, NULL, NULL, FALSE, buf); + if (!buf_valid(buf)) + return NULL; +*** ../vim-7.4.644/src/ex_cmds.c 2015-02-17 12:17:10.837775002 +0100 +--- src/ex_cmds.c 2015-02-27 19:28:47.232909242 +0100 +*************** +*** 3375,3381 **** + if (buf->b_ml.ml_mfp == NULL) /* no memfile yet */ + { + oldbuf = FALSE; +- buf->b_nwindows = 0; + } + else /* existing memfile */ + { +--- 3375,3380 ---- +*************** +*** 3408,3414 **** + * Make the (new) buffer the one used by the current window. + * If the old buffer becomes unused, free it if ECMD_HIDE is FALSE. + * If the current buffer was empty and has no file name, curbuf +! * is returned by buflist_new(). + */ + if (buf != curbuf) + { +--- 3407,3413 ---- + * Make the (new) buffer the one used by the current window. + * If the old buffer becomes unused, free it if ECMD_HIDE is FALSE. + * If the current buffer was empty and has no file name, curbuf +! * is returned by buflist_new(), nothing to do here. + */ + if (buf != curbuf) + { +*************** +*** 3515,3522 **** + au_new_curbuf = NULL; + #endif + } +- else +- ++curbuf->b_nwindows; + + curwin->w_pcmark.lnum = 1; + curwin->w_pcmark.col = 0; +--- 3514,3519 ---- +*** ../vim-7.4.644/src/version.c 2015-02-27 18:25:10.820179062 +0100 +--- src/version.c 2015-02-27 19:33:06.153971911 +0100 +*************** +*** 743,744 **** +--- 743,746 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 645, + /**/ + +-- + He was not in the least bit scared to be mashed into a pulp + Or to have his eyes gouged out and his elbows broken; + To have his kneecaps split and his body burned away + And his limbs all hacked and mangled, brave Sir Robin. + "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ an exciting new programming language -- http://www.Zimbu.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org ///