diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/api/extmark.c | 3 | ||||
-rw-r--r-- | src/nvim/decoration_provider.c | 9 |
2 files changed, 7 insertions, 5 deletions
diff --git a/src/nvim/api/extmark.c b/src/nvim/api/extmark.c index 6ec1fc4ee0..268fdded9a 100644 --- a/src/nvim/api/extmark.c +++ b/src/nvim/api/extmark.c @@ -1035,7 +1035,8 @@ void nvim_buf_clear_namespace(Buffer buffer, Integer ns_id, Integer line_start, /// window callbacks) /// ["buf", bufnr, tick] /// - on_win: called when starting to redraw a -/// specific window. +/// specific window. botline_guess is an approximation +/// that does not exceed the last line number. /// ["win", winid, bufnr, topline, botline_guess] /// - on_line: called for each buffer line being redrawn. /// (The interaction with fold lines is subject to change) diff --git a/src/nvim/decoration_provider.c b/src/nvim/decoration_provider.c index 8e5809c4e0..63c9772fb8 100644 --- a/src/nvim/decoration_provider.c +++ b/src/nvim/decoration_provider.c @@ -126,9 +126,10 @@ void decor_providers_invoke_win(win_T *wp, DecorProviders *providers, { kvi_init(*line_providers); - linenr_T knownmax = ((wp->w_valid & VALID_BOTLINE) - ? wp->w_botline - : (wp->w_topline + wp->w_height_inner)); + linenr_T knownmax = MIN(wp->w_buffer->b_ml.ml_line_count, + ((wp->w_valid & VALID_BOTLINE) + ? wp->w_botline + : MAX(wp->w_topline + wp->w_height_inner, wp->w_botline))); for (size_t k = 0; k < kv_size(*providers); k++) { DecorProvider *p = kv_A(*providers, k); @@ -138,7 +139,7 @@ void decor_providers_invoke_win(win_T *wp, DecorProviders *providers, ADD_C(args, BUFFER_OBJ(wp->w_buffer->handle)); // TODO(bfredl): we are not using this, but should be first drawn line? ADD_C(args, INTEGER_OBJ(wp->w_topline - 1)); - ADD_C(args, INTEGER_OBJ(knownmax)); + ADD_C(args, INTEGER_OBJ(knownmax - 1)); if (decor_provider_invoke(p, "win", p->redraw_win, args, true)) { kvi_push(*line_providers, p); } |