aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbfredl <bjorn.linse@gmail.com>2024-03-14 10:55:40 +0100
committerbfredl <bjorn.linse@gmail.com>2024-03-14 10:56:24 +0100
commitfc2a56fe61a95b4124045039b39e20419920d2e2 (patch)
treeb9ba275a1d3447315a0923ada2c642b4c012983a
parent8955cef0c6963678994347dbf95ed09fc8e29407 (diff)
downloadrneovim-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.c8
-rw-r--r--test/functional/api/buffer_spec.lua11
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] [+] }|
|
]],