| To: vim_dev@googlegroups.com |
| Subject: Patch 7.3.852 |
| Fcc: outbox |
| From: Bram Moolenaar <Bram@moolenaar.net> |
| Mime-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| |
| Patch 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. |
| Files: src/ui.c, src/ops.c |
| |
| |
| |
| |
| |
| *** 2119,2125 **** |
| text_prop.encoding = *type; |
| text_prop.format = *format; |
| text_prop.nitems = len; |
| ! status = XmbTextPropertyToTextList(X_DISPLAY, &text_prop, |
| &text_list, &n_text); |
| if (status != Success || n_text < 1) |
| { |
| --- 2119,2131 ---- |
| text_prop.encoding = *type; |
| text_prop.format = *format; |
| text_prop.nitems = len; |
| ! #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) |
| { |
| |
| |
| |
| *** 5828,5833 **** |
| --- 5828,5835 ---- |
| && 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,5847 **** |
| --- 5844,5850 ---- |
| 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,5860 **** |
| vim_free(str); |
| str = conv_str; |
| } |
| convert_setup(&vc, NULL, NULL); |
| } |
| } |
| #endif |
| ! XStoreBuffer(dpy, (char *)str, (int)len, 0); |
| ! XFlush(dpy); |
| } |
| |
| vim_free(str); |
| --- 5852,5877 ---- |
| 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); |
| ! } |
| } |
| |
| vim_free(str); |
| |
| |
| |
| *** 730,731 **** |
| --- 730,733 ---- |
| { /* Add new patch number below this line */ |
| + /**/ |
| + 852, |
| /**/ |
| |
| -- |
| Tips for aliens in New York: Land anywhere. Central Park, anywhere. |
| No one will care or indeed even notice. |
| -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy" |
| |
| /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ |
| /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ |
| \\\ an exciting new programming language -- http://www.Zimbu.org /// |
| \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |