# HG changeset patch # User Bram Moolenaar # Date 1662118204 -7200 # Node ID c222a5a2a42ad97648f077b41a12d9f5a6f9c859 # Parent 562a3136dda30c22583273f3a1ac856b4d8d50d8 patch 9.0.0356: :echowindow sets the in_echowindow flag too early Commit: https://github.com/vim/vim/commit/a02a8a4d849906ae100f46f23642b5f7d1bd314e Author: Yasuhiro Matsumoto Date: Fri Sep 2 12:16:21 2022 +0100 patch 9.0.0356: :echowindow sets the in_echowindow flag too early Problem: :echowindow sets the in_echowindow flag too early. Solution: Set in_echowindow only when outputting the text. (Yasuhiro Matsumoto, closes #11033) diff --git a/src/eval.c b/src/eval.c --- a/src/eval.c +++ b/src/eval.c @@ -6728,10 +6728,6 @@ ex_execute(exarg_T *eap) long start_lnum = SOURCING_LNUM; ga_init2(&ga, 1, 80); -#ifdef HAS_MESSAGE_WINDOW - if (eap->cmdidx == CMD_echowindow) - start_echowindow(); -#endif if (eap->skip) ++emsg_skip; @@ -6796,11 +6792,21 @@ ex_execute(exarg_T *eap) msg_sb_eol(); } - if (eap->cmdidx == CMD_echomsg || eap->cmdidx == CMD_echowindow) + if (eap->cmdidx == CMD_echomsg) { msg_attr(ga.ga_data, echo_attr); out_flush(); } + else if (eap->cmdidx == CMD_echowindow) + { +#ifdef HAS_MESSAGE_WINDOW + start_echowindow(); +#endif + msg_attr(ga.ga_data, echo_attr); +#ifdef HAS_MESSAGE_WINDOW + end_echowindow(); +#endif + } else if (eap->cmdidx == CMD_echoconsole) { ui_write(ga.ga_data, (int)STRLEN(ga.ga_data), TRUE); @@ -6832,10 +6838,6 @@ ex_execute(exarg_T *eap) if (eap->skip) --emsg_skip; -#ifdef HAS_MESSAGE_WINDOW - if (eap->cmdidx == CMD_echowindow) - end_echowindow(); -#endif set_nextcmd(eap, arg); } diff --git a/src/testdir/dumps/Test_echowin_eval.dump b/src/testdir/dumps/Test_echowin_eval.dump new file mode 100644 --- /dev/null +++ b/src/testdir/dumps/Test_echowin_eval.dump @@ -0,0 +1,8 @@ +> +0&#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|═+0#e000002&@74 +|t|e|s|t| @70 +|1+0#0000000&|2|3| @53|0|,|0|-|1| @8|A|l@1| diff --git a/src/testdir/test_messages.vim b/src/testdir/test_messages.vim --- a/src/testdir/test_messages.vim +++ b/src/testdir/test_messages.vim @@ -420,5 +420,25 @@ func Test_echowindow() call delete('XtestEchowindow') endfunc +" messages window should not be used while evaluating the :echowin argument +func Test_echowin_eval() + CheckScreendump + + let lines =<< trim END + func ShowMessage() + echo 123 + return 'test' + endfunc + echowindow ShowMessage() + END + call writefile(lines, 'XtestEchowindow') + let buf = RunVimInTerminal('-S XtestEchowindow', #{rows: 8}) + call VerifyScreenDump(buf, 'Test_echowin_eval', {}) + + " clean up + call StopVimInTerminal(buf) + call delete('XtestEchowindow') +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -708,6 +708,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 356, +/**/ 355, /**/ 354,