mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
updated for version 7.3.852
Problem: system() breaks clipboard text. (Yukihiro Nakadaira) Solution: Use Xutf8TextPropertyToTextList(). (Christian Brabandt) Also do not put the text in the clip buffer if conversion fails.
This commit is contained in:
21
src/ops.c
21
src/ops.c
@@ -5828,6 +5828,8 @@ x11_export_final_selection()
|
|||||||
&& len < 1024*1024 && len > 0)
|
&& len < 1024*1024 && len > 0)
|
||||||
{
|
{
|
||||||
#ifdef FEAT_MBYTE
|
#ifdef FEAT_MBYTE
|
||||||
|
int ok = TRUE;
|
||||||
|
|
||||||
/* The CUT_BUFFER0 is supposed to always contain latin1. Convert from
|
/* The CUT_BUFFER0 is supposed to always contain latin1. Convert from
|
||||||
* 'enc' when it is a multi-byte encoding. When 'enc' is an 8-bit
|
* 'enc' when it is a multi-byte encoding. When 'enc' is an 8-bit
|
||||||
* encoding conversion usually doesn't work, so keep the text as-is.
|
* encoding conversion usually doesn't work, so keep the text as-is.
|
||||||
@@ -5842,6 +5844,7 @@ x11_export_final_selection()
|
|||||||
int intlen = len;
|
int intlen = len;
|
||||||
char_u *conv_str;
|
char_u *conv_str;
|
||||||
|
|
||||||
|
vc.vc_fail = TRUE;
|
||||||
conv_str = string_convert(&vc, str, &intlen);
|
conv_str = string_convert(&vc, str, &intlen);
|
||||||
len = intlen;
|
len = intlen;
|
||||||
if (conv_str != NULL)
|
if (conv_str != NULL)
|
||||||
@@ -5849,12 +5852,26 @@ x11_export_final_selection()
|
|||||||
vim_free(str);
|
vim_free(str);
|
||||||
str = conv_str;
|
str = conv_str;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ok = FALSE;
|
||||||
|
}
|
||||||
convert_setup(&vc, NULL, NULL);
|
convert_setup(&vc, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ok = FALSE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Do not store the string if conversion failed. Better to use any
|
||||||
|
* other selection than garbled text. */
|
||||||
|
if (ok)
|
||||||
#endif
|
#endif
|
||||||
XStoreBuffer(dpy, (char *)str, (int)len, 0);
|
{
|
||||||
XFlush(dpy);
|
XStoreBuffer(dpy, (char *)str, (int)len, 0);
|
||||||
|
XFlush(dpy);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
vim_free(str);
|
vim_free(str);
|
||||||
|
8
src/ui.c
8
src/ui.c
@@ -2119,7 +2119,13 @@ clip_x11_request_selection_cb(w, success, sel_atom, type, value, length,
|
|||||||
text_prop.encoding = *type;
|
text_prop.encoding = *type;
|
||||||
text_prop.format = *format;
|
text_prop.format = *format;
|
||||||
text_prop.nitems = len;
|
text_prop.nitems = len;
|
||||||
status = XmbTextPropertyToTextList(X_DISPLAY, &text_prop,
|
#ifdef FEAT_MBYTE
|
||||||
|
if (*type == utf8_atom)
|
||||||
|
status = Xutf8TextPropertyToTextList(X_DISPLAY, &text_prop,
|
||||||
|
&text_list, &n_text);
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
status = XmbTextPropertyToTextList(X_DISPLAY, &text_prop,
|
||||||
&text_list, &n_text);
|
&text_list, &n_text);
|
||||||
if (status != Success || n_text < 1)
|
if (status != Success || n_text < 1)
|
||||||
{
|
{
|
||||||
|
@@ -728,6 +728,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
852,
|
||||||
/**/
|
/**/
|
||||||
851,
|
851,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user