summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-06-04 17:11:47 +0200
committerBram Moolenaar <Bram@vim.org>2021-06-04 17:11:47 +0200
commit6e0b553fa12fc5ad5d8ee3d8457e7cb16f38b56f (patch)
treec44800eb22c5b806dbc18c05a7d890e8b4b1f905
parent4f3c57f7980592b25f483e5953799c010a8ae196 (diff)
patch 8.2.2933: when 'clipboard' is "unnamed" zp does not work correctlyv8.2.2933
Problem: When 'clipboard' is "unnamed" zp and zP do not work correctly. Solution: Pass -1 to str_to_reg() and fix computing the character width instead of using the byte length. (Christian Brabandt, closes #8301, closes #8317)
-rw-r--r--src/clipboard.c2
-rw-r--r--src/mbyte.c2
-rw-r--r--src/register.c13
-rw-r--r--src/version.c2
4 files changed, 12 insertions, 7 deletions
diff --git a/src/clipboard.c b/src/clipboard.c
index c26349291e..b1da99bcbe 100644
--- a/src/clipboard.c
+++ b/src/clipboard.c
@@ -2090,7 +2090,7 @@ clip_yank_selection(
clip_free_selection(cbd);
- str_to_reg(y_ptr, type, str, len, 0L, FALSE);
+ str_to_reg(y_ptr, type, str, len, -1, FALSE);
}
/*
diff --git a/src/mbyte.c b/src/mbyte.c
index 6df3a15dee..4b78eee0e5 100644
--- a/src/mbyte.c
+++ b/src/mbyte.c
@@ -4308,7 +4308,6 @@ mb_charlen(char_u *str)
return count;
}
-#if (defined(FEAT_SPELL) || defined(FEAT_EVAL)) || defined(PROTO)
/*
* Like mb_charlen() but for a string with specified length.
*/
@@ -4323,7 +4322,6 @@ mb_charlen_len(char_u *str, int len)
return count;
}
-#endif
/*
* Try to un-escape a multi-byte character.
diff --git a/src/register.c b/src/register.c
index f4d934393b..8680c6bf32 100644
--- a/src/register.c
+++ b/src/register.c
@@ -2836,6 +2836,7 @@ str_to_reg(
char_u **ss;
char_u **pp;
long maxlen;
+ int charlen;
if (y_ptr->y_array == NULL) // NULL means empty register
y_ptr->y_size = 0;
@@ -2894,22 +2895,26 @@ str_to_reg(
{
for (ss = (char_u **) str; *ss != NULL; ++ss, ++lnum)
{
+ charlen = MB_CHARLEN(*ss);
i = (long)STRLEN(*ss);
pp[lnum] = vim_strnsave(*ss, i);
- if (i > maxlen)
- maxlen = i;
+ if (charlen > maxlen)
+ maxlen = charlen;
}
}
else
{
for (start = 0; start < len + extraline; start += i + 1)
{
+ charlen = 0;
for (i = start; i < len; ++i) // find the end of the line
if (str[i] == '\n')
break;
i -= start; // i is now length of line
- if (i > maxlen)
- maxlen = i;
+ if (start < len)
+ charlen = mb_charlen_len(str + start, i);
+ if (charlen > maxlen)
+ maxlen = charlen;
if (append)
{
--lnum;
diff --git a/src/version.c b/src/version.c
index 5ebcfcb07d..ab4ffeb39b 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 2933,
+/**/
2932,
/**/
2931,