aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjörn Linse <bjorn.linse@gmail.com>2021-05-07 10:52:36 +0200
committerGitHub <noreply@github.com>2021-05-07 10:52:36 +0200
commit8c9f0f1da1249bf423672ed7e408877d4f1f257f (patch)
tree950bc357a94fbba469b9d3a3d5695e798414f064
parent21035cff9f1d279e3cb5ec866916bfa231cdbaa2 (diff)
parent37c8067226779f1b98a41454949c986f740f4e0e (diff)
downloadrneovim-8c9f0f1da1249bf423672ed7e408877d4f1f257f.tar.gz
rneovim-8c9f0f1da1249bf423672ed7e408877d4f1f257f.tar.bz2
rneovim-8c9f0f1da1249bf423672ed7e408877d4f1f257f.zip
Merge pull request #14502 from chentau/extmark_paste
Splice extmarks on every line for block visual paste
-rw-r--r--src/nvim/ops.c13
-rw-r--r--test/functional/lua/buffer_updates_spec.lua22
2 files changed, 29 insertions, 6 deletions
diff --git a/src/nvim/ops.c b/src/nvim/ops.c
index 54d73b6ae7..10b8ebdc22 100644
--- a/src/nvim/ops.c
+++ b/src/nvim/ops.c
@@ -3334,6 +3334,9 @@ void do_put(int regname, yankreg_T *reg, int dir, long count, int flags)
changed_cline_bef_curs();
curwin->w_cursor.col += (colnr_T)(totlen - 1);
}
+ changed_bytes(lnum, col);
+ extmark_splice_cols(curbuf, (int)lnum-1, col,
+ 0, (int)totlen, kExtmarkUndo);
}
if (VIsual_active) {
lnum++;
@@ -3345,12 +3348,10 @@ void do_put(int regname, yankreg_T *reg, int dir, long count, int flags)
}
curbuf->b_op_end = curwin->w_cursor;
- /* For "CTRL-O p" in Insert mode, put cursor after last char */
- if (totlen && (restart_edit != 0 || (flags & PUT_CURSEND)))
- ++curwin->w_cursor.col;
- changed_bytes(lnum, col);
- extmark_splice_cols(curbuf, (int)lnum-1, col,
- 0, (int)totlen, kExtmarkUndo);
+ // For "CTRL-O p" in Insert mode, put cursor after last char
+ if (totlen && (restart_edit != 0 || (flags & PUT_CURSEND))) {
+ curwin->w_cursor.col++;
+ }
} else {
// Insert at least one line. When y_type is kMTCharWise, break the first
// line in two.
diff --git a/test/functional/lua/buffer_updates_spec.lua b/test/functional/lua/buffer_updates_spec.lua
index 5da8452a51..d4c65eae5b 100644
--- a/test/functional/lua/buffer_updates_spec.lua
+++ b/test/functional/lua/buffer_updates_spec.lua
@@ -936,6 +936,28 @@ describe('lua: nvim_buf_attach on_bytes', function()
}
end)
+ it("block visual paste", function()
+ local check_events = setup_eventcheck(verify, {"AAA",
+ "BBB",
+ "CCC",
+ "DDD",
+ "EEE",
+ "FFF"})
+ funcs.setreg("a", "___")
+ feed([[gg0l<c-v>3jl"ap]])
+
+ check_events {
+ { "test1", "bytes", 1, 3, 0, 1, 1, 0, 2, 2, 0, 0, 0 };
+ { "test1", "bytes", 1, 3, 1, 1, 3, 0, 2, 2, 0, 0, 0 };
+ { "test1", "bytes", 1, 3, 2, 1, 5, 0, 2, 2, 0, 0, 0 };
+ { "test1", "bytes", 1, 3, 3, 1, 7, 0, 2, 2, 0, 0, 0 };
+ { "test1", "bytes", 1, 5, 0, 1, 1, 0, 0, 0, 0, 3, 3 };
+ { "test1", "bytes", 1, 6, 1, 1, 6, 0, 0, 0, 0, 3, 3 };
+ { "test1", "bytes", 1, 7, 2, 1, 11, 0, 0, 0, 0, 3, 3 };
+ { "test1", "bytes", 1, 8, 3, 1, 16, 0, 0, 0, 0, 3, 3 };
+ }
+ end)
+
teardown(function()
os.remove "Xtest-reload"
os.remove "Xtest-undofile"