Mercurial > vim
diff src/if_perl.xs @ 31263:d8e7d725a666 v9.0.0965
patch 9.0.0965: using one window for executing autocommands is insufficient
Commit: https://github.com/vim/vim/commit/e76062c078debed0df818f70e4db14ad7a7cb53a
Author: Bram Moolenaar <Bram@vim.org>
Date: Mon Nov 28 18:51:43 2022 +0000
patch 9.0.0965: using one window for executing autocommands is insufficient
Problem: Using one window for executing autocommands is insufficient.
Solution: Use up to five windows for executing autocommands.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Mon, 28 Nov 2022 20:00:05 +0100 |
parents | 551ce1a137da |
children | d83068c95ba0 |
line wrap: on
line diff
--- a/src/if_perl.xs +++ b/src/if_perl.xs @@ -1869,18 +1869,21 @@ Set(vimbuf, ...) { aco_save_T aco; - /* set curwin/curbuf for "vimbuf" and save some things */ + /* Set curwin/curbuf for "vimbuf" and save some things. */ aucmd_prepbuf(&aco, vimbuf); - - if (u_savesub(lnum) == OK) + if (curbuf == vimbuf) { - ml_replace(lnum, (char_u *)line, TRUE); - changed_bytes(lnum, 0); - } + /* Only when a window was found. */ + if (u_savesub(lnum) == OK) + { + ml_replace(lnum, (char_u *)line, TRUE); + changed_bytes(lnum, 0); + } - /* restore curwin/curbuf and a few other things */ - aucmd_restbuf(&aco); - /* Careful: autocommands may have made "vimbuf" invalid! */ + /* restore curwin/curbuf and a few other things */ + aucmd_restbuf(&aco); + /* Careful: autocommands may have made "vimbuf" invalid! */ + } } } } @@ -1921,18 +1924,22 @@ Delete(vimbuf, ...) /* set curwin/curbuf for "vimbuf" and save some things */ aucmd_prepbuf(&aco, vimbuf); - - if (u_savedel(lnum, 1) == OK) + if (curbuf == vimbuf) { - ml_delete(lnum); - check_cursor(); - deleted_lines_mark(lnum, 1L); + /* Only when a window was found. */ + if (u_savedel(lnum, 1) == OK) + { + ml_delete(lnum); + check_cursor(); + deleted_lines_mark(lnum, 1L); + } + + /* restore curwin/curbuf and a few other things */ + aucmd_restbuf(&aco); + /* Careful: autocommands may have made "vimbuf" + * invalid! */ } - /* restore curwin/curbuf and a few other things */ - aucmd_restbuf(&aco); - /* Careful: autocommands may have made "vimbuf" invalid! */ - update_curbuf(UPD_VALID); } } @@ -1963,16 +1970,19 @@ Append(vimbuf, ...) /* set curwin/curbuf for "vimbuf" and save some things */ aucmd_prepbuf(&aco, vimbuf); - - if (u_inssub(lnum + 1) == OK) + if (curbuf == vimbuf) { - ml_append(lnum, (char_u *)line, (colnr_T)0, FALSE); - appended_lines_mark(lnum, 1L); - } + /* Only when a window for "vimbuf" was found. */ + if (u_inssub(lnum + 1) == OK) + { + ml_append(lnum, (char_u *)line, (colnr_T)0, FALSE); + appended_lines_mark(lnum, 1L); + } - /* restore curwin/curbuf and a few other things */ - aucmd_restbuf(&aco); - /* Careful: autocommands may have made "vimbuf" invalid! */ + /* restore curwin/curbuf and a few other things */ + aucmd_restbuf(&aco); + /* Careful: autocommands may have made "vimbuf" invalid! */ + } update_curbuf(UPD_VALID); }