# HG changeset patch # User Bram Moolenaar # Date 1617296403 -7200 # Node ID 93b401236991e3a73e00866edec6beffe1d8a34f # Parent b776f5c2e2c24792ce7dcd95e501bfef0bda0862 patch 8.2.2686: status line is not updated when going to cmdline mode Commit: https://github.com/vim/vim/commit/ce0b75711afb3ff260967a0843bca46ec09604b5 Author: Bram Moolenaar Date: Thu Apr 1 18:47:14 2021 +0200 patch 8.2.2686: status line is not updated when going to cmdline mode Problem: Status line is not updated when going to cmdline mode. Solution: Redraw status lines if 'statusline' is set and going to status line mode. (based on patch from Justin M. Keyes et al., closes #8044) diff --git a/src/ex_getln.c b/src/ex_getln.c --- a/src/ex_getln.c +++ b/src/ex_getln.c @@ -1706,6 +1706,15 @@ getcmdline_int( // and execute commands. Display may be messed up a bit. if (did_emsg) redrawcmd(); + + // Redraw the statusline in case it uses the current mode using the mode() + // function. + if (!cmd_silent && msg_scrolled == 0 && *p_stl != NUL) + { + curwin->w_redr_status = TRUE; + redraw_statuslines(); + } + did_emsg = FALSE; got_int = FALSE; diff --git a/src/testdir/dumps/Test_statusline_mode_1.dump b/src/testdir/dumps/Test_statusline_mode_1.dump new file mode 100644 --- /dev/null +++ b/src/testdir/dumps/Test_statusline_mode_1.dump @@ -0,0 +1,5 @@ +> +0&#ffffff0@49 +|~+0#4040ff13&| @48 +|~| @48 +|-+3#0000000&|n|-| @46 +| +0&&@49 diff --git a/src/testdir/dumps/Test_statusline_mode_2.dump b/src/testdir/dumps/Test_statusline_mode_2.dump new file mode 100644 --- /dev/null +++ b/src/testdir/dumps/Test_statusline_mode_2.dump @@ -0,0 +1,5 @@ +| +0&#ffffff0@49 +|~+0#4040ff13&| @48 +|~| @48 +|-+3#0000000&|c|-| @46 +|:+0&&> @48 diff --git a/src/testdir/test_statusline.vim b/src/testdir/test_statusline.vim --- a/src/testdir/test_statusline.vim +++ b/src/testdir/test_statusline.vim @@ -448,6 +448,27 @@ func Test_statusline_removed_group() call delete('XTest_statusline') endfunc +func Test_statusline_using_mode() + CheckScreendump + + let lines =<< trim END + set laststatus=2 + let &statusline = '-%{mode()}-' + END + call writefile(lines, 'XTest_statusline') + + let buf = RunVimInTerminal('-S XTest_statusline', {'rows': 5, 'cols': 50}) + call VerifyScreenDump(buf, 'Test_statusline_mode_1', {}) + + call term_sendkeys(buf, ":") + call VerifyScreenDump(buf, 'Test_statusline_mode_2', {}) + + " clean up + call term_sendkeys(buf, "\") + call StopVimInTerminal(buf) + call delete('XTest_statusline') +endfunc + func Test_statusline_after_split_vsplit() only diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2686, +/**/ 2685, /**/ 2684,