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


*** ../vim-7.3.851/src/ui.c     2012-10-21 00:58:34.000000000 +0200
--- src/ui.c    2013-03-07 17:30:37.000000000 +0100
***************
*** 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)
        {
*** ../vim-7.3.851/src/ops.c    2012-12-12 16:11:28.000000000 +0100
--- src/ops.c   2013-03-07 17:55:59.000000000 +0100
***************
*** 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);
*** ../vim-7.3.851/src/version.c        2013-03-07 16:41:26.000000000 +0100
--- src/version.c       2013-03-07 18:01:08.000000000 +0100
***************
*** 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 -- [email protected] -- 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    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Raspunde prin e-mail lui