changeset 24394:5858745d393a v8.2.2737

patch 8.2.2737: status line not updated when local 'statusline' option set Commit: https://github.com/vim/vim/commit/d8db8383926cb8729417d9515cbfaf455dbbd8d1 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Apr 8 18:27:53 2021 +0200 patch 8.2.2737: status line not updated when local 'statusline' option set Problem: Status line not updated when local 'statusline' option set. Solution: Check the 'statusline' option of each window.
author Bram Moolenaar <Bram@vim.org>
date Thu, 08 Apr 2021 18:30:04 +0200
parents 7383531aa41d
children 5cd55703c76d
files src/ex_getln.c src/testdir/dumps/Test_statusline_mode_1.dump src/testdir/dumps/Test_statusline_mode_2.dump src/testdir/test_statusline.vim src/version.c
diffstat 5 files changed, 27 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -1710,10 +1710,19 @@ getcmdline_int(
 #ifdef FEAT_STL_OPT
     // Redraw the statusline in case it uses the current mode using the mode()
     // function.
-    if (!cmd_silent && msg_scrolled == 0 && *p_stl != NUL)
+    if (!cmd_silent && msg_scrolled == 0)
     {
-	curwin->w_redr_status = TRUE;
-	redraw_statuslines();
+	int	found_one = FALSE;
+	win_T	*wp;
+
+	FOR_ALL_WINDOWS(wp)
+	    if (*p_stl != NUL || *wp->w_p_stl != NUL)
+	    {
+		wp->w_redr_status = TRUE;
+		found_one = TRUE;
+	    }
+	if (found_one)
+	    redraw_statuslines();
     }
 #endif
 
--- a/src/testdir/dumps/Test_statusline_mode_1.dump
+++ b/src/testdir/dumps/Test_statusline_mode_1.dump
@@ -1,5 +1,7 @@
 > +0&#ffffff0@49
 |~+0#4040ff13&| @48
-|~| @48
-|-+3#0000000&|n|-| @46
+|++3#0000000&|n|+| @46
 | +0&&@49
+|~+0#4040ff13&| @48
+|-+1#0000000&|n|-| @46
+| +0&&@49
--- a/src/testdir/dumps/Test_statusline_mode_2.dump
+++ b/src/testdir/dumps/Test_statusline_mode_2.dump
@@ -1,5 +1,7 @@
 | +0&#ffffff0@49
 |~+0#4040ff13&| @48
-|~| @48
-|-+3#0000000&|c|-| @46
+|++3#0000000&|c|+| @46
+| +0&&@49
+|~+0#4040ff13&| @48
+|-+1#0000000&|c|-| @46
 |:+0&&> @48
--- a/src/testdir/test_statusline.vim
+++ b/src/testdir/test_statusline.vim
@@ -452,19 +452,20 @@ func Test_statusline_using_mode()
   CheckScreendump
 
   let lines =<< trim END
-    set laststatus=2
-    let &statusline = '-%{mode()}-'
+    setlocal statusline=-%{mode()}-
+    split
+    setlocal statusline=+%{mode()}+
   END
   call writefile(lines, 'XTest_statusline')
 
-  let buf = RunVimInTerminal('-S XTest_statusline', {'rows': 5, 'cols': 50})
+  let buf = RunVimInTerminal('-S XTest_statusline', {'rows': 7, '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, "\<CR>")
+  call term_sendkeys(buf, "close\<CR>")
   call StopVimInTerminal(buf)
   call delete('XTest_statusline')
 endfunc
--- 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 */
 /**/
+    2737,
+/**/
     2736,
 /**/
     2735,