diff options
author | bfredl <bjorn.linse@gmail.com> | 2023-08-28 11:35:09 +0200 |
---|---|---|
committer | bfredl <bjorn.linse@gmail.com> | 2023-08-29 09:26:15 +0200 |
commit | 0a81ec14a4c006822509b06396871509140b7a79 (patch) | |
tree | 3455796f8c48fe8c5f202fe3044580c8fe7d8930 /src/nvim/api/buffer.c | |
parent | 794981d9bed7048fb3ee1ada38fcf1ebdace4c53 (diff) | |
download | rneovim-0a81ec14a4c006822509b06396871509140b7a79.tar.gz rneovim-0a81ec14a4c006822509b06396871509140b7a79.tar.bz2 rneovim-0a81ec14a4c006822509b06396871509140b7a79.zip |
fix(api): better topline adjustments in nvim_buf_set_lines
Some more reasonable defaults for topline:
- if topline was replaced with another line, that now becomes topline
- if line was inserted just before topline, display it. This is more
similar to the previous API behavior.
Diffstat (limited to 'src/nvim/api/buffer.c')
-rw-r--r-- | src/nvim/api/buffer.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/nvim/api/buffer.c b/src/nvim/api/buffer.c index d36f0dd050..b8cb09ceb3 100644 --- a/src/nvim/api/buffer.c +++ b/src/nvim/api/buffer.c @@ -464,7 +464,8 @@ void nvim_buf_set_lines(uint64_t channel_id, Buffer buffer, Integer start, Integ // Adjust marks. Invalidate any which lie in the // changed range, and move any in the remainder of the buffer. - mark_adjust_buf(buf, (linenr_T)start, (linenr_T)(end - 1), MAXLNUM, (linenr_T)extra, + linenr_T adjust = end > start ? MAXLNUM : 0; + mark_adjust_buf(buf, (linenr_T)start, (linenr_T)(end - 1), adjust, (linenr_T)extra, true, true, kExtmarkNOOP); extmark_splice(buf, (int)start - 1, 0, (int)(end - start), 0, @@ -711,7 +712,8 @@ void nvim_buf_set_text(uint64_t channel_id, Buffer buffer, Integer start_row, In // Adjust marks. Invalidate any which lie in the // changed range, and move any in the remainder of the buffer. // Do not adjust any cursors. need to use column-aware logic (below) - mark_adjust_buf(buf, (linenr_T)start_row, (linenr_T)end_row, MAXLNUM, (linenr_T)extra, + linenr_T adjust = end_row >= start_row ? MAXLNUM : 0; + mark_adjust_buf(buf, (linenr_T)start_row, (linenr_T)end_row, adjust, (linenr_T)extra, true, true, kExtmarkNOOP); extmark_splice(buf, (int)start_row - 1, (colnr_T)start_col, |