feat(api): add "max_height" argument to nvim_win_text_height (#32835)

Useful to e.g. limit the height to the window height, avoiding unnecessary
work. Or to find out how many buffer lines beyond "start_row" take up a
certain number of logical lines (returned in "end_row" and "end_vcol").
This commit is contained in:
luukvbaal
2025-04-21 13:48:26 +02:00
committed by GitHub
parent 98ec3fdf74
commit 7ba043f0f3
10 changed files with 423 additions and 185 deletions

View File

@@ -933,22 +933,26 @@ void ui_ext_win_viewport(win_T *wp)
last_botline = MIN(last_botline, line_count);
if (cur_topline < last_topline
|| (cur_topline == last_topline && wp->w_skipcol < last_skipcol)) {
int64_t vcole = last_skipcol;
linenr_T lnume = last_topline;
if (last_topline > 0 && cur_botline < last_topline) {
// Scrolling too many lines: only give an approximate "scroll_delta".
delta -= win_text_height(wp, cur_topline, wp->w_skipcol, cur_botline, 0, NULL);
delta -= last_topline - cur_botline;
} else {
delta -= win_text_height(wp, cur_topline, wp->w_skipcol, last_topline, last_skipcol, NULL);
lnume = cur_botline;
vcole = 0;
}
delta -= win_text_height(wp, cur_topline, wp->w_skipcol, &lnume, &vcole, NULL, INT64_MAX);
} else if (cur_topline > last_topline
|| (cur_topline == last_topline && wp->w_skipcol > last_skipcol)) {
int64_t vcole = wp->w_skipcol;
linenr_T lnume = cur_topline;
if (last_botline > 0 && cur_topline > last_botline) {
// Scrolling too many lines: only give an approximate "scroll_delta".
delta += win_text_height(wp, last_topline, last_skipcol, last_botline, 0, NULL);
delta += cur_topline - last_botline;
} else {
delta += win_text_height(wp, last_topline, last_skipcol, cur_topline, wp->w_skipcol, NULL);
lnume = last_botline;
vcole = 0;
}
delta += win_text_height(wp, last_topline, last_skipcol, &lnume, &vcole, NULL, INT64_MAX);
}
delta += last_topfill;
delta -= wp->w_topfill;