diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-04-21 19:43:09 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-21 19:43:09 +0800 |
commit | e6dec30332f2538ae45d58e6bb674c8a28422fe9 (patch) | |
tree | fa4cdcbcd401c058af5811a17a7e0d0028847cc4 /src/nvim/ex_cmds.c | |
parent | 5c4ec254784e7e92f61b69114c6091a198fe600f (diff) | |
parent | 5e9afca1c19914cdf6f81685c7950ab180278b1f (diff) | |
download | rneovim-e6dec30332f2538ae45d58e6bb674c8a28422fe9.tar.gz rneovim-e6dec30332f2538ae45d58e6bb674c8a28422fe9.tar.bz2 rneovim-e6dec30332f2538ae45d58e6bb674c8a28422fe9.zip |
Merge pull request #18182 from zeertzjq/vim-8.2.2472
vim-patch:8.1.1756,8.2.{2472,2474,2475,2476,2477,4791,4802}: autocommand fixes
Diffstat (limited to 'src/nvim/ex_cmds.c')
-rw-r--r-- | src/nvim/ex_cmds.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/nvim/ex_cmds.c b/src/nvim/ex_cmds.c index 61bd9571b5..e16537c192 100644 --- a/src/nvim/ex_cmds.c +++ b/src/nvim/ex_cmds.c @@ -2497,16 +2497,19 @@ int do_ecmd(int fnum, char_u *ffname, char_u *sfname, exarg_T *eap, linenr_T new if (buf->b_fname != NULL) { new_name = vim_strsave(buf->b_fname); } + const bufref_T save_au_new_curbuf = au_new_curbuf; set_bufref(&au_new_curbuf, buf); apply_autocmds(EVENT_BUFLEAVE, NULL, NULL, false, curbuf); cmdwin_type = save_cmdwin_type; if (!bufref_valid(&au_new_curbuf)) { // New buffer has been deleted. delbuf_msg(new_name); // Frees new_name. + au_new_curbuf = save_au_new_curbuf; goto theend; } if (aborting()) { // autocmds may abort script processing xfree(new_name); + au_new_curbuf = save_au_new_curbuf; goto theend; } if (buf == curbuf) { // already in new buffer @@ -2540,12 +2543,14 @@ int do_ecmd(int fnum, char_u *ffname, char_u *sfname, exarg_T *eap, linenr_T new // autocmds may abort script processing if (aborting() && curwin->w_buffer != NULL) { xfree(new_name); + au_new_curbuf = save_au_new_curbuf; goto theend; } // Be careful again, like above. if (!bufref_valid(&au_new_curbuf)) { // New buffer has been deleted. delbuf_msg(new_name); // Frees new_name. + au_new_curbuf = save_au_new_curbuf; goto theend; } if (buf == curbuf) { // already in new buffer @@ -2585,8 +2590,7 @@ int do_ecmd(int fnum, char_u *ffname, char_u *sfname, exarg_T *eap, linenr_T new did_get_winopts = true; } xfree(new_name); - au_new_curbuf.br_buf = NULL; - au_new_curbuf.br_buf_free_count = 0; + au_new_curbuf = save_au_new_curbuf; } curwin->w_pcmark.lnum = 1; |