diff options
author | glepnir <glephunter@gmail.com> | 2024-04-20 12:01:28 +0800 |
---|---|---|
committer | glepnir <glephunter@gmail.com> | 2024-04-21 15:25:46 +0800 |
commit | 5f18dd30137565da782c155b52b530c172b3b29d (patch) | |
tree | e4b6f641be8cdee56c694f1845c0e45c02a3e353 /src | |
parent | 4d52b0cf670502caf81b70f2f1e6f8c548b78f58 (diff) | |
download | rneovim-5f18dd30137565da782c155b52b530c172b3b29d.tar.gz rneovim-5f18dd30137565da782c155b52b530c172b3b29d.tar.bz2 rneovim-5f18dd30137565da782c155b52b530c172b3b29d.zip |
fix(float): wrong position when bufpos is set
Problem: when lnum in bufpos is out of range the position of float is wired.
Solution: avoid the height value out of buffer line range.
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/window.c | 3 | ||||
-rw-r--r-- | src/nvim/winfloat.c | 2 |
2 files changed, 3 insertions, 2 deletions
diff --git a/src/nvim/window.c b/src/nvim/window.c index ea879d450b..8c63090419 100644 --- a/src/nvim/window.c +++ b/src/nvim/window.c @@ -827,7 +827,8 @@ void ui_ext_win_position(win_T *wp, bool validate) row += row_off; col += col_off; if (c.bufpos.lnum >= 0) { - pos_T pos = { c.bufpos.lnum + 1, c.bufpos.col, 0 }; + int lnum = MIN(c.bufpos.lnum + 1, win->w_buffer->b_ml.ml_line_count); + pos_T pos = { lnum, c.bufpos.col, 0 }; int trow, tcol, tcolc, tcole; textpos2screenpos(win, &pos, &trow, &tcol, &tcolc, &tcole, true); row += trow - 1; diff --git a/src/nvim/winfloat.c b/src/nvim/winfloat.c index 65d2c1306b..f271f7d055 100644 --- a/src/nvim/winfloat.c +++ b/src/nvim/winfloat.c @@ -221,7 +221,7 @@ void win_config_float(win_T *wp, WinConfig fconfig) row += row_off; col += col_off; if (wp->w_config.bufpos.lnum >= 0) { - pos_T pos = { wp->w_config.bufpos.lnum + 1, + pos_T pos = { MIN(wp->w_config.bufpos.lnum + 1, parent->w_buffer->b_ml.ml_line_count), wp->w_config.bufpos.col, 0 }; int trow, tcol, tcolc, tcole; textpos2screenpos(parent, &pos, &trow, &tcol, &tcolc, &tcole, true); |