From 8c8961d9a28ad9c79dc8de09801d975b8a450257 Mon Sep 17 00:00:00 2001 From: Jan Edmund Lazo Date: Fri, 28 Jun 2019 20:50:04 -0400 Subject: vim-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 vim/vim#2171, closes vim/vim#2120) https://github.com/vim/vim/commit/65ed136844fbaffdd473903ed841c944600234dc --- src/nvim/buffer.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'src/nvim/buffer.c') diff --git a/src/nvim/buffer.c b/src/nvim/buffer.c index 5678f518f5..d9ed9c6861 100644 --- a/src/nvim/buffer.c +++ b/src/nvim/buffer.c @@ -3361,7 +3361,6 @@ int build_stl_str_hl( char_u *usefmt = fmt; const int save_must_redraw = must_redraw; const int save_redr_type = curwin->w_redr_type; - const int save_highlight_shcnaged = need_highlight_changed; // When the format starts with "%!" then evaluate it as an expression and // use the result as the actual format string. @@ -4425,12 +4424,12 @@ int build_stl_str_hl( cur_tab_rec->def.func = NULL; } - // 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; } -- cgit