diff src/buffer.c @ 12572:31737ff54115 v8.0.1164

patch 8.0.1164: changing StatusLine highlight does not always work commit https://github.com/vim/vim/commit/65ed136844fbaffdd473903ed841c944600234dc Author: Bram Moolenaar <Bram@vim.org> Date: Sat Sep 30 16:00:14 2017 +0200 patch 8.0.1164: changing StatusLine highlight does not always work Problem: Changing StatusLine highlight while evaluating 'statusline' may not change the status line color. Solution: When changing highlighting while redrawing don't cause another redraw. (suggested by Ozaki Kiichi, closes #2171, closes #2120)
author Christian Brabandt <cb@256bit.org>
date Sat, 30 Sep 2017 16:15:04 +0200
parents 65c7769ef6d1
children 560adb3eed8b
line wrap: on
line diff
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -3910,7 +3910,6 @@ build_stl_str_hl(
     struct stl_hlrec *sp;
     int		save_must_redraw = must_redraw;
     int		save_redr_type = curwin->w_redr_type;
-    int		save_highlight_shcnaged = need_highlight_changed;
 
 #ifdef FEAT_EVAL
     /*
@@ -4683,12 +4682,13 @@ build_stl_str_hl(
 	sp->userhl = 0;
     }
 
-    /* We do not want redrawing a stausline, ruler, title, etc. to trigger
-     * another redraw, it may cause an endless loop.  This happens when a
-     * statusline changes a highlight group. */
-    must_redraw = save_must_redraw;
-    curwin->w_redr_type = save_redr_type;
-    need_highlight_changed = save_highlight_shcnaged;
+    /* When inside update_screen we do not want redrawing a stausline, ruler,
+     * title, etc. to trigger another redraw, it may cause an endless loop. */
+    if (updating_screen)
+    {
+	must_redraw = save_must_redraw;
+	curwin->w_redr_type = save_redr_type;
+    }
 
     return width;
 }