vim-patch:9.0.0245: mechanism to prevent recursive screen updating is incomplete (#27448)

Problem:    Mechanism to prevent recursive screen updating is incomplete.
Solution:   Add "redraw_not_allowed" and set it in build_stl_str_hl().
            (issue vim/vim#10952)

471c0fa3ee

Co-authored-by: Bram Moolenaar <Bram@vim.org>
This commit is contained in:
zeertzjq
2024-02-13 06:30:35 +08:00
committed by GitHub
parent 84b6ade415
commit 984f7a9fd3
7 changed files with 33 additions and 31 deletions

View File

@@ -322,7 +322,7 @@ static void changed_common(buf_T *buf, linenr_T lnum, colnr_T col, linenr_T lnum
FOR_ALL_TAB_WINDOWS(tp, wp) {
if (wp->w_buffer == buf) {
// Mark this window to be redrawn later.
if (wp->w_redr_type < UPD_VALID) {
if (!redraw_not_allowed && wp->w_redr_type < UPD_VALID) {
wp->w_redr_type = UPD_VALID;
}
@@ -390,9 +390,7 @@ static void changed_common(buf_T *buf, linenr_T lnum, colnr_T col, linenr_T lnum
// Call update_screen() later, which checks out what needs to be redrawn,
// since it notices b_mod_set and then uses b_mod_*.
if (must_redraw < UPD_VALID) {
must_redraw = UPD_VALID;
}
set_must_redraw(UPD_VALID);
// when the cursor line is changed always trigger CursorMoved
if (last_cursormoved_win == curwin && curwin->w_buffer == buf