# HG changeset patch # User Bram Moolenaar # Date 1362675750 -3600 # Node ID 3fd805ca2a6a6ef231f111c6a7b3cd512abaf537 # Parent 606423157270ae54bc5455e12ca18a30a38fa21f 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. diff --git a/src/ops.c b/src/ops.c --- a/src/ops.c +++ b/src/ops.c @@ -5828,6 +5828,8 @@ x11_export_final_selection() && len < 1024*1024 && len > 0) { #ifdef FEAT_MBYTE + int ok = TRUE; + /* 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 * encoding conversion usually doesn't work, so keep the text as-is. @@ -5842,6 +5844,7 @@ x11_export_final_selection() int intlen = len; char_u *conv_str; + vc.vc_fail = TRUE; conv_str = string_convert(&vc, str, &intlen); len = intlen; if (conv_str != NULL) @@ -5849,12 +5852,26 @@ x11_export_final_selection() vim_free(str); str = conv_str; } + else + { + ok = FALSE; + } convert_setup(&vc, NULL, NULL); } + else + { + ok = FALSE; + } } -#endif - XStoreBuffer(dpy, (char *)str, (int)len, 0); - XFlush(dpy); + + /* Do not store the string if conversion failed. Better to use any + * other selection than garbled text. */ + if (ok) +#endif + { + XStoreBuffer(dpy, (char *)str, (int)len, 0); + XFlush(dpy); + } } vim_free(str); diff --git a/src/ui.c b/src/ui.c --- a/src/ui.c +++ b/src/ui.c @@ -2119,7 +2119,13 @@ clip_x11_request_selection_cb(w, success text_prop.encoding = *type; text_prop.format = *format; 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); if (status != Success || n_text < 1) { diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -729,6 +729,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 852, +/**/ 851, /**/ 850,