diff options
author | Lewis Russell <lewis6991@gmail.com> | 2022-03-07 12:02:20 +0000 |
---|---|---|
committer | Lewis Russell <lewis6991@gmail.com> | 2022-03-08 22:08:57 +0000 |
commit | 2ab2af598eff1bea9a4aa5da51d6c202173d5ee7 (patch) | |
tree | aab6f64065db848ded2aafd3255582ed73c28f3a /src/nvim/screen.c | |
parent | c3cc17f0e61d70436c601444298fceeafbfbacb3 (diff) | |
download | rneovim-2ab2af598eff1bea9a4aa5da51d6c202173d5ee7.tar.gz rneovim-2ab2af598eff1bea9a4aa5da51d6c202173d5ee7.tar.bz2 rneovim-2ab2af598eff1bea9a4aa5da51d6c202173d5ee7.zip |
fix(extmarks): fix signs
Don't add sign extmarks to state->active. Instead when drawing signs,
perform a full line scan for sign marks. This allows decor_redraw_line
to be moved back inside the `!number_only` block in screen.c, which
prevents decor scans when redrawing the number column when
'relativenumber' is set.
Fixes: #17638
Diffstat (limited to 'src/nvim/screen.c')
-rw-r--r-- | src/nvim/screen.c | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/src/nvim/screen.c b/src/nvim/screen.c index ee1acd8d03..1498d1c9b3 100644 --- a/src/nvim/screen.c +++ b/src/nvim/screen.c @@ -2208,8 +2208,6 @@ static int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, bool noc buf_T *buf = wp->w_buffer; bool end_fill = (lnum == buf->b_ml.ml_line_count+1); - has_decor = decor_redraw_line(buf, lnum-1, &decor_state); - if (!number_only) { // To speed up the loop below, set extra_check when there is linebreak, // trailing white space and/or syntax processing to be done. @@ -2231,6 +2229,8 @@ static int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, bool noc } } + has_decor = decor_redraw_line(buf, lnum-1, &decor_state); + for (size_t k = 0; k < kv_size(*providers); k++) { DecorProvider *p = kv_A(*providers, k); if (p && p->redraw_line != LUA_NOREF) { @@ -2459,9 +2459,7 @@ static int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, bool noc memset(sattrs, 0, sizeof(sattrs)); num_signs = buf_get_signattrs(wp->w_buffer, lnum, sattrs); - if (decor_state.has_sign_decor) { - decor_redraw_signs(buf, &decor_state, lnum-1, &num_signs, sattrs); - } + decor_redraw_signs(buf, lnum-1, &num_signs, sattrs); // If this line has a sign with line highlighting set line_attr. // TODO(bfredl, vigoux): this should not take priority over decoration! |