diff options
author | luukvbaal <luukvbaal@gmail.com> | 2025-04-01 07:56:16 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-04-01 07:56:16 +0200 |
commit | 32325a66ca0df66ba712b3316f24c358c4947620 (patch) | |
tree | 370b70f0ccdae3fac5cec80c8a0feafcac50ec13 | |
parent | 8a40213eb38dcdcb4c59dda2fe088f5919e903f2 (diff) | |
download | rneovim-32325a66ca0df66ba712b3316f24c358c4947620.tar.gz rneovim-32325a66ca0df66ba712b3316f24c358c4947620.tar.bz2 rneovim-32325a66ca0df66ba712b3316f24c358c4947620.zip |
fix(move): adjust for concealed lines above topline after scrolling up (#33211)
Problem: Scrolling up does not adjust `w_topline` for concealed lines
directly above it, resulting in (non-visual) asymmetry when
scrolling up/down.
Solution: Adjust `w_topline` for concealed lines after scrolling up.
-rw-r--r-- | src/nvim/move.c | 10 | ||||
-rw-r--r-- | test/functional/ui/decorations_spec.lua | 7 |
2 files changed, 16 insertions, 1 deletions
diff --git a/src/nvim/move.c b/src/nvim/move.c index 89d2b69f51..55e724f38d 100644 --- a/src/nvim/move.c +++ b/src/nvim/move.c @@ -1363,8 +1363,9 @@ bool scrolldown(win_T *wp, linenr_T line_count, int byfold) } wp->w_botline -= wp->w_topline - first; wp->w_topline = first; + } else if (decor_conceal_line(wp, wp->w_topline - 1, false)) { + todo++; } else { - todo += decor_conceal_line(wp, wp->w_topline - 1, false); if (do_sms) { int size = linetabsize_eol(wp, wp->w_topline); if (size > width1) { @@ -1386,6 +1387,13 @@ bool scrolldown(win_T *wp, linenr_T line_count, int byfold) wp->w_botline--; // approximate w_botline invalidate_botline(wp); } + + // Adjust for concealed lines above w_topline + while (wp->w_topline > 1 && decor_conceal_line(wp, wp->w_topline - 2, false)) { + wp->w_topline--; + hasFolding(wp, wp->w_topline, &wp->w_topline, NULL); + } + wp->w_wrow += done; // keep w_wrow updated wp->w_cline_row += done; // keep w_cline_row updated diff --git a/test/functional/ui/decorations_spec.lua b/test/functional/ui/decorations_spec.lua index 5ef1ef54bb..06bb5a14c9 100644 --- a/test/functional/ui/decorations_spec.lua +++ b/test/functional/ui/decorations_spec.lua @@ -2978,6 +2978,13 @@ describe('extmark decorations', function() {1:~ }| | ]]) + -- No asymmetric topline for <C-E><C-Y> #33182 + feed('4<C-E>') + exec('set concealcursor=n') + api.nvim_buf_set_extmark(0, ns, 4, 0, { conceal_lines = "" }) + eq(5, n.fn.line('w0')) + feed('<C-E><C-Y>') + eq(5, n.fn.line('w0')) end) end) |