aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorchentau <tchen1998@gmail.com>2021-03-22 19:44:21 -0700
committerchentau <tchen1998@gmail.com>2021-03-23 14:06:57 -0700
commit7fbabbaa576cd3e1de303d6040b1c8444d5708a7 (patch)
treef2b3637706bdd4476bb913679b2e06f4243ba491 /src
parentd41778c993e95c8b37b3d8e10dacc3060ae489da (diff)
downloadrneovim-7fbabbaa576cd3e1de303d6040b1c8444d5708a7.tar.gz
rneovim-7fbabbaa576cd3e1de303d6040b1c8444d5708a7.tar.bz2
rneovim-7fbabbaa576cd3e1de303d6040b1c8444d5708a7.zip
Extmarks: correct buffer events on blockwise paste
Diffstat (limited to 'src')
-rw-r--r--src/nvim/ops.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/nvim/ops.c b/src/nvim/ops.c
index 3038fad894..0ff427c261 100644
--- a/src/nvim/ops.c
+++ b/src/nvim/ops.c
@@ -3177,7 +3177,8 @@ void do_put(int regname, yankreg_T *reg, int dir, long count, int flags)
// insert the new text
totlen = (size_t)(count * (yanklen + spaces)
+ bd.startspaces + bd.endspaces);
- newp = (char_u *) xmalloc(totlen + oldlen + 1);
+ int addcount = (int)totlen + lines_appended;
+ newp = (char_u *)xmalloc(totlen + oldlen + 1);
// copy part up to cursor to new line
ptr = newp;
memmove(ptr, oldp, (size_t)bd.textcol);
@@ -3194,6 +3195,8 @@ void do_put(int regname, yankreg_T *reg, int dir, long count, int flags)
if ((j < count - 1 || !shortline) && spaces) {
memset(ptr, ' ', (size_t)spaces);
ptr += spaces;
+ } else {
+ addcount -= spaces;
}
}
// may insert some spaces after the new text
@@ -3205,7 +3208,7 @@ void do_put(int regname, yankreg_T *reg, int dir, long count, int flags)
memmove(ptr, oldp + bd.textcol + delcount, (size_t)columns);
ml_replace(curwin->w_cursor.lnum, newp, false);
extmark_splice_cols(curbuf, (int)curwin->w_cursor.lnum-1, bd.textcol,
- delcount, (int)totlen + lines_appended, kExtmarkUndo);
+ delcount, addcount, kExtmarkUndo);
++curwin->w_cursor.lnum;
if (i == 0)