Mercurial > vim
diff src/register.c @ 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 | 1ce39e257f1b |
children | 91c42289cbe1 |
line wrap: on
line diff
--- 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;