diff options
author | Björn Linse <bjorn.linse@gmail.com> | 2021-05-07 10:52:36 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-07 10:52:36 +0200 |
commit | 8c9f0f1da1249bf423672ed7e408877d4f1f257f (patch) | |
tree | 950bc357a94fbba469b9d3a3d5695e798414f064 | |
parent | 21035cff9f1d279e3cb5ec866916bfa231cdbaa2 (diff) | |
parent | 37c8067226779f1b98a41454949c986f740f4e0e (diff) | |
download | rneovim-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.c | 13 | ||||
-rw-r--r-- | test/functional/lua/buffer_updates_spec.lua | 22 |
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" |