aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Edmund Lazo <jan.lazo@mail.utoronto.ca>2019-08-28 05:37:18 -0400
committerJustin M. Keyes <justinkz@gmail.com>2019-08-28 11:37:18 +0200
commit1d59575450e0a09d710a7cad2b8e1b5c5e0242f5 (patch)
tree013c69ad8d3516146b77bbc75577de227a393fc0
parent82d52b229df711b710862ce772603ea55113a32e (diff)
downloadrneovim-1d59575450e0a09d710a7cad2b8e1b5c5e0242f5.tar.gz
rneovim-1d59575450e0a09d710a7cad2b8e1b5c5e0242f5.tar.bz2
rneovim-1d59575450e0a09d710a7cad2b8e1b5c5e0242f5.zip
vim-patch:8.0.0303: shift_delete_registers() #10868
Problem: Bracketed paste does not work in Visual mode. Solution: Delete the text before pasting https://github.com/vim/vim/commit/a1891848d970452cd775d35a4bccfdd9758a690a
-rw-r--r--src/nvim/ops.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/src/nvim/ops.c b/src/nvim/ops.c
index ebf5c7a7bc..df4452cd4a 100644
--- a/src/nvim/ops.c
+++ b/src/nvim/ops.c
@@ -1323,6 +1323,19 @@ bool cmdline_paste_reg(int regname, bool literally, bool remcr)
return OK;
}
+// Shift the delete registers: "9 is cleared, "8 becomes "9, etc.
+static void shift_delete_registers(bool y_append)
+{
+ free_register(&y_regs[9]); // free register "9
+ for (int n = 9; n > 1; n--) {
+ y_regs[n] = y_regs[n - 1];
+ }
+ if (!y_append) {
+ y_previous = &y_regs[1];
+ }
+ y_regs[1].y_array = NULL; // set register "1 to empty
+}
+
/*
* Handle a delete operation.
*
@@ -1417,13 +1430,7 @@ int op_delete(oparg_T *oap)
*/
if (oap->regname != 0 || oap->motion_type == kMTLineWise
|| oap->line_count > 1 || oap->use_reg_one) {
- free_register(&y_regs[9]); /* free register "9 */
- for (n = 9; n > 1; n--)
- y_regs[n] = y_regs[n - 1];
- if (!is_append_register(oap->regname)) {
- y_previous = &y_regs[1];
- }
- y_regs[1].y_array = NULL; // set register "1 to empty
+ shift_delete_registers(is_append_register(oap->regname));
reg = &y_regs[1];
op_yank_reg(oap, false, reg, false);
did_yank = true;