diff options
author | Bram Moolenaar <Bram@vim.org> | 2013-03-07 18:02:30 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2013-03-07 18:02:30 +0100 |
commit | e2e663f67d9f44ae876659bd492f734d48bd2970 (patch) | |
tree | 68d090a7dd23ed00c415eab3868aa9ae5ad055d4 | |
parent | 210f3704f795870c513a136725718e10ac2bdbfc (diff) | |
download | vim-git-e2e663f67d9f44ae876659bd492f734d48bd2970.tar.gz |
updated for version 7.3.852v7.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.
-rw-r--r-- | src/ops.c | 21 | ||||
-rw-r--r-- | src/ui.c | 8 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 28 insertions, 3 deletions
@@ -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; + } } + + /* 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); + { + XStoreBuffer(dpy, (char *)str, (int)len, 0); + XFlush(dpy); + } } vim_free(str); @@ -2119,7 +2119,13 @@ clip_x11_request_selection_cb(w, success, sel_atom, type, value, length, 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 index 97fdd990c..eeb4f6128 100644 --- 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, |