Mercurial > vim
diff src/os_unix.c @ 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 | 5b71c3884a2a |
children | fa309d9af73c |
line wrap: on
line diff
--- a/src/os_unix.c +++ b/src/os_unix.c @@ -4490,27 +4490,30 @@ mch_call_shell_terminal( // Find a window to make "buf" curbuf. aucmd_prepbuf(&aco, buf); - - clear_oparg(&oa); - while (term_use_loop()) - { - if (oa.op_type == OP_NOP && oa.regname == NUL && !VIsual_active) - { - // If terminal_loop() returns OK we got a key that is handled - // in Normal model. We don't do redrawing anyway. - if (terminal_loop(TRUE) == OK) + if (curbuf == buf) + { + // Only when managed to find a window for "buf", + clear_oparg(&oa); + while (term_use_loop()) + { + if (oa.op_type == OP_NOP && oa.regname == NUL && !VIsual_active) + { + // If terminal_loop() returns OK we got a key that is handled + // in Normal model. We don't do redrawing anyway. + if (terminal_loop(TRUE) == OK) + normal_cmd(&oa, TRUE); + } + else normal_cmd(&oa, TRUE); } - else - normal_cmd(&oa, TRUE); - } - retval = job->jv_exitval; - ch_log(NULL, "system command finished"); - - job_unref(job); - - // restore curwin/curbuf and a few other things - aucmd_restbuf(&aco); + retval = job->jv_exitval; + ch_log(NULL, "system command finished"); + + job_unref(job); + + // restore curwin/curbuf and a few other things + aucmd_restbuf(&aco); + } // Only require pressing Enter when redrawing, to avoid that system() gets // the hit-enter prompt even though it didn't output anything.