changeset 24790:14b86681e6e6 v8.2.2933

patch 8.2.2933: when 'clipboard' is "unnamed" zp does not work correctly Commit: https://github.com/vim/vim/commit/6e0b553fa12fc5ad5d8ee3d8457e7cb16f38b56f Author: Bram Moolenaar <Bram@vim.org> Date: Fri Jun 4 17:11:47 2021 +0200 patch 8.2.2933: when 'clipboard' is "unnamed" zp does not work correctly 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)
author Bram Moolenaar <Bram@vim.org>
date Fri, 04 Jun 2021 17:15:03 +0200
parents dcb034bff83a
children 362a9333f234
files src/clipboard.c src/mbyte.c src/register.c src/version.c
diffstat 4 files changed, 12 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- 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);
 }
 
 /*
--- 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.
--- 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;
--- 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,