aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBjörn Linse <bjorn.linse@gmail.com>2015-07-03 16:02:07 +0200
committerBjörn Linse <bjorn.linse@gmail.com>2015-07-04 18:17:30 +0200
commite9c9d44f6531b4d648c55c235ecf5753a50adf6f (patch)
treeab8ded916132bcd4d9dfdcc05a083d22e79dc805 /src
parent0ffd51425e70525bdbc792a1c6592f807b84e212 (diff)
downloadrneovim-e9c9d44f6531b4d648c55c235ecf5753a50adf6f.tar.gz
rneovim-e9c9d44f6531b4d648c55c235ecf5753a50adf6f.tar.bz2
rneovim-e9c9d44f6531b4d648c55c235ecf5753a50adf6f.zip
clipboard: don't overwrite before pasting in visual mode. #2945
This occured when clipboard=unnamedplus and doing "+p in visual mode. Fixes #2942.
Diffstat (limited to 'src')
-rw-r--r--src/nvim/normal.c5
-rw-r--r--src/nvim/ops.c2
-rw-r--r--src/nvim/option_defs.h1
3 files changed, 5 insertions, 3 deletions
diff --git a/src/nvim/normal.c b/src/nvim/normal.c
index 7b42467184..92734e404a 100644
--- a/src/nvim/normal.c
+++ b/src/nvim/normal.c
@@ -7278,7 +7278,10 @@ static void nv_put(cmdarg_T *cap)
*/
was_visual = true;
regname = cap->oap->regname;
- if (regname == 0 || regname == '"'
+ // '+' and '*' could be the same selection
+ bool clipoverwrite = (regname == '+' || regname == '*')
+ && (cb_flags & CB_UNNAMEDMASK);
+ if (regname == 0 || regname == '"' || clipoverwrite
|| ascii_isdigit(regname) || regname == '-') {
// The delete might overwrite the register we want to put, save it first
savereg = copy_register(regname);
diff --git a/src/nvim/ops.c b/src/nvim/ops.c
index d8df6ae72d..063ad154f1 100644
--- a/src/nvim/ops.c
+++ b/src/nvim/ops.c
@@ -67,8 +67,6 @@
#define PLUS_REGISTER 38
#define NUM_REGISTERS 39
-#define CB_UNNAMEDMASK (CB_UNNAMED | CB_UNNAMEDPLUS)
-
static yankreg_T y_regs[NUM_REGISTERS];
static yankreg_T *y_previous = NULL; /* ptr to last written yankreg */
diff --git a/src/nvim/option_defs.h b/src/nvim/option_defs.h
index 80f2373a85..b13ead9cbb 100644
--- a/src/nvim/option_defs.h
+++ b/src/nvim/option_defs.h
@@ -318,6 +318,7 @@ static char *(p_cb_values[]) = {"unnamed", "unnamedplus", NULL};
#endif
# define CB_UNNAMED 0x001
# define CB_UNNAMEDPLUS 0x002
+# define CB_UNNAMEDMASK (CB_UNNAMED | CB_UNNAMEDPLUS)
EXTERN long p_cwh; /* 'cmdwinheight' */
EXTERN long p_ch; /* 'cmdheight' */
EXTERN int p_confirm; /* 'confirm' */