From c14bfc31d907cbee6a3636f780561ad1787cdb9b Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Tue, 20 Sep 2022 13:17:57 +0100 Subject: [PATCH] patch 9.0.0512: cannot redraw the status lines when editing a command Problem: Cannot redraw the status lines when editing a command. Solution: Only postpone the redraw when messages have scrolled. (closes #11170) --- src/ex_docmd.c | 2 +- src/testdir/dumps/Test_redrawstatus_in_autocmd_1.dump | 4 ++-- src/testdir/dumps/Test_redrawstatus_in_autocmd_2.dump | 8 ++++++++ src/testdir/test_cmdline.vim | 7 ++++++- src/version.c | 2 ++ 5 files changed, 19 insertions(+), 4 deletions(-) create mode 100644 src/testdir/dumps/Test_redrawstatus_in_autocmd_2.dump diff --git a/src/ex_docmd.c b/src/ex_docmd.c index 3076d5344b..8cdf601f86 100644 --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -8431,7 +8431,7 @@ ex_redrawstatus(exarg_T *eap UNUSED) status_redraw_all(); else status_redraw_curbuf(); - if (State & MODE_CMDLINE) + if (msg_scrolled) return; // redraw later RedrawingDisabled = 0; diff --git a/src/testdir/dumps/Test_redrawstatus_in_autocmd_1.dump b/src/testdir/dumps/Test_redrawstatus_in_autocmd_1.dump index 91e436444c..50cf6007c0 100644 --- a/src/testdir/dumps/Test_redrawstatus_in_autocmd_1.dump +++ b/src/testdir/dumps/Test_redrawstatus_in_autocmd_1.dump @@ -1,7 +1,7 @@ |~+0#4040ff13#ffffff0| @73 |~| @73 -|~| @73 -|o+0#0000000&|n|e| @71 +| +3#0000000&@73|: +|o+0&&|n|e| @71 |t|w|o| @71 |t|h|r|e@1| @69 |f|o|u|r| @70 diff --git a/src/testdir/dumps/Test_redrawstatus_in_autocmd_2.dump b/src/testdir/dumps/Test_redrawstatus_in_autocmd_2.dump new file mode 100644 index 0000000000..eca2f9a55c --- /dev/null +++ b/src/testdir/dumps/Test_redrawstatus_in_autocmd_2.dump @@ -0,0 +1,8 @@ +| +0&#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +3#0000000&@67|:|f|o@1|b|a|r +|:+0&&|f|o@1|b|a|r> @67 diff --git a/src/testdir/test_cmdline.vim b/src/testdir/test_cmdline.vim index 3014ac36a5..f81cec930c 100644 --- a/src/testdir/test_cmdline.vim +++ b/src/testdir/test_cmdline.vim @@ -214,15 +214,20 @@ func Test_redrawstatus_in_autocmd() CheckScreendump let lines =<< trim END - set cmdheight=2 + set laststatus=2 + set statusline=%=:%{getcmdline()} autocmd CmdlineChanged * if getcmdline() == 'foobar' | redrawstatus | endif END call writefile(lines, 'XTest_redrawstatus', 'D') let buf = RunVimInTerminal('-S XTest_redrawstatus', {'rows': 8}) + " :redrawstatus is postponed if messages have scrolled call term_sendkeys(buf, ":echo \"one\\ntwo\\nthree\\nfour\"\") call term_sendkeys(buf, ":foobar") call VerifyScreenDump(buf, 'Test_redrawstatus_in_autocmd_1', {}) + " it is not postponed if messages have not scrolled + call term_sendkeys(buf, "\:foobar") + call VerifyScreenDump(buf, 'Test_redrawstatus_in_autocmd_2', {}) " clean up call term_sendkeys(buf, "\") diff --git a/src/version.c b/src/version.c index c6f76acb83..55da620bc0 100644 --- a/src/version.c +++ b/src/version.c @@ -699,6 +699,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 512, /**/ 511, /**/