diff options
author | bfredl <bjorn.linse@gmail.com> | 2024-03-14 10:55:40 +0100 |
---|---|---|
committer | bfredl <bjorn.linse@gmail.com> | 2024-03-14 10:56:24 +0100 |
commit | fc2a56fe61a95b4124045039b39e20419920d2e2 (patch) | |
tree | b9ba275a1d3447315a0923ada2c642b4c012983a | |
parent | 8955cef0c6963678994347dbf95ed09fc8e29407 (diff) | |
download | rneovim-fc2a56fe61a95b4124045039b39e20419920d2e2.tar.gz rneovim-fc2a56fe61a95b4124045039b39e20419920d2e2.tar.bz2 rneovim-fc2a56fe61a95b4124045039b39e20419920d2e2.zip |
fix(api): fix set_lines viewport adjustment, but this time good
fixes #27720
-rw-r--r-- | src/nvim/mark.c | 8 | ||||
-rw-r--r-- | test/functional/api/buffer_spec.lua | 11 |
2 files changed, 9 insertions, 10 deletions
diff --git a/src/nvim/mark.c b/src/nvim/mark.c index 1273093d8b..6ce42bb7fe 100644 --- a/src/nvim/mark.c +++ b/src/nvim/mark.c @@ -1243,11 +1243,11 @@ void mark_adjust_buf(buf_T *buf, linenr_T line1, linenr_T line2, linenr_T amount if (win != curwin || by_api) { if (win->w_topline >= line1 && win->w_topline <= line2) { if (amount == MAXLNUM) { // topline is deleted - if (line1 <= 1) { - win->w_topline = 1; + if (by_api && amount_after > line1 - line2 - 1) { + // api: if the deleted region was replaced with new contents, topline will + // get adjusted later as an effect of the adjusted cursor in fix_cursor() } else { - // api: if the deleted region was replaced with new contents, display that - win->w_topline = (by_api && amount_after > line1 - line2 - 1) ? line1 : line1 - 1; + win->w_topline = MAX(line1 - 1, 1); } } else if (win->w_topline > line1) { // keep topline on the same line, unless inserting just diff --git a/test/functional/api/buffer_spec.lua b/test/functional/api/buffer_spec.lua index f46cf7a315..a560546d2d 100644 --- a/test/functional/api/buffer_spec.lua +++ b/test/functional/api/buffer_spec.lua @@ -150,16 +150,16 @@ describe('api/buf', function() ]], } + lines[5] = 'boogalo 5' api.nvim_buf_set_lines(buf, 0, -1, true, lines) screen:expect { grid = [[ ^ | {1:~ }|*4 {2:[No Name] }| - line3 | - line4 | - line5 | + boogalo 5 | line6 | + {1:~ }|*2 {3:[No Name] [+] }| | ]], @@ -171,10 +171,9 @@ describe('api/buf', function() | {1:~ }|*4 {3:[No Name] }| - line3 | - line4 | - line5 | + boogalo 5 | ^line6 | + {1:~ }|*2 {2:[No Name] [+] }| | ]], |