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)
65ed136844
This commit is contained in:
Jan Edmund Lazo
2019-06-28 20:50:04 -04:00
parent 6012e4a52c
commit 8c8961d9a2
2 changed files with 18 additions and 9 deletions

View File

@@ -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;
}