1
0
forked from aniani/vim

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:
Bram Moolenaar
2013-03-07 18:02:30 +01:00
parent 210f3704f7
commit e2e663f67d
3 changed files with 28 additions and 3 deletions

View File

@@ -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);

View File

@@ -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)
{ {

View File

@@ -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,
/**/ /**/