Patch 7.3.221
Problem:    Text from the clipboard is sometimes handled as linewise, but not
            consistently.
Solution:   Assume the text is linewise when it ends in a CR or NL.
Files:      src/gui_gtk_x11.c, src/gui_mac.c, src/ops.c, src/os_msdos.c,
            src/os_mswin.c, src/os_qnx.c, src/ui.c


*** ../mercurial/vim73/src/gui_gtk_x11.c        2011-02-25 17:10:22.000000000 
+0100
--- src/gui_gtk_x11.c   2011-06-19 00:58:31.000000000 +0200
***************
*** 1173,1179 ****
      char_u        *tmpbuf = NULL;
      guchar        *tmpbuf_utf8 = NULL;
      int                   len;
!     int                   motion_type;
  
      if (data->selection == clip_plus.gtk_sel_atom)
        cbd = &clip_plus;
--- 1173,1179 ----
      char_u        *tmpbuf = NULL;
      guchar        *tmpbuf_utf8 = NULL;
      int                   len;
!     int                   motion_type = MAUTO;
  
      if (data->selection == clip_plus.gtk_sel_atom)
        cbd = &clip_plus;
***************
*** 1182,1188 ****
  
      text = (char_u *)data->data;
      len  = data->length;
-     motion_type = MCHAR;
  
      if (text == NULL || len <= 0)
      {
--- 1182,1187 ----
*** ../mercurial/vim73/src/gui_mac.c    2011-06-12 20:33:30.000000000 +0200
--- src/gui_mac.c       2011-06-19 00:59:07.000000000 +0200
***************
*** 4671,4677 ****
      if (flavor)
        type = **textOfClip;
      else
!       type = (strchr(*textOfClip, '\r') != NULL) ? MLINE : MCHAR;
  
      tempclip = lalloc(scrapSize + 1, TRUE);
      mch_memmove(tempclip, *textOfClip + flavor, scrapSize);
--- 4671,4677 ----
      if (flavor)
        type = **textOfClip;
      else
!       type = MAUTO;
  
      tempclip = lalloc(scrapSize + 1, TRUE);
      mch_memmove(tempclip, *textOfClip + flavor, scrapSize);
*** ../mercurial/vim73/src/ops.c        2011-04-01 16:28:33.000000000 +0200
--- src/ops.c   2011-06-19 00:59:39.000000000 +0200
***************
*** 5733,5739 ****
      }
  }
  
! /* Convert from the GUI selection string into the '*'/'+' register */
      void
  clip_yank_selection(type, str, len, cbd)
      int               type;
--- 5733,5741 ----
      }
  }
  
! /*
!  * Convert from the GUI selection string into the '*'/'+' register.
!  */
      void
  clip_yank_selection(type, str, len, cbd)
      int               type;
***************
*** 6090,6098 ****
      if (yank_type == MBLOCK)
        yank_type = MAUTO;
  #endif
-     if (yank_type == MAUTO)
-       yank_type = ((len > 0 && (str[len - 1] == '\n' || str[len - 1] == '\r'))
-                                                            ? MLINE : MCHAR);
      str_to_reg(y_current, yank_type, str, len, block_len);
  
  # ifdef FEAT_CLIPBOARD
--- 6092,6097 ----
***************
*** 6113,6125 ****
   * is appended.
   */
      static void
! str_to_reg(y_ptr, type, str, len, blocklen)
      struct yankreg    *y_ptr;         /* pointer to yank register */
!     int                       type;           /* MCHAR, MLINE or MBLOCK */
      char_u            *str;           /* string to put in register */
      long              len;            /* length of string */
      long              blocklen;       /* width of Visual block */
  {
      int               lnum;
      long      start;
      long      i;
--- 6112,6125 ----
   * is appended.
   */
      static void
! str_to_reg(y_ptr, yank_type, str, len, blocklen)
      struct yankreg    *y_ptr;         /* pointer to yank register */
!     int                       yank_type;      /* MCHAR, MLINE, MBLOCK, MAUTO 
*/
      char_u            *str;           /* string to put in register */
      long              len;            /* length of string */
      long              blocklen;       /* width of Visual block */
  {
+     int               type;                   /* MCHAR, MLINE or MBLOCK */
      int               lnum;
      long      start;
      long      i;
***************
*** 6136,6141 ****
--- 6136,6147 ----
      if (y_ptr->y_array == NULL)               /* NULL means empty register */
        y_ptr->y_size = 0;
  
+     if (yank_type == MAUTO)
+       type = ((len > 0 && (str[len - 1] == NL || str[len - 1] == CAR))
+                                                            ? MLINE : MCHAR);
+     else
+       type = yank_type;
+ 
      /*
       * Count the number of lines within the string
       */
*** ../mercurial/vim73/src/os_msdos.c   2010-12-17 18:06:00.000000000 +0100
--- src/os_msdos.c      2011-06-19 01:00:56.000000000 +0200
***************
*** 2232,2238 ****
      void
  clip_mch_request_selection(VimClipboard *cbd)
  {
!     int               type = MCHAR;
      char_u    *pAllocated = NULL;
      char_u    *pClipText = NULL;
      int               clip_data_format = 0;
--- 2232,2238 ----
      void
  clip_mch_request_selection(VimClipboard *cbd)
  {
!     int               type = MAUTO;
      char_u    *pAllocated = NULL;
      char_u    *pClipText = NULL;
      int               clip_data_format = 0;
***************
*** 2280,2293 ****
        {
            clip_data_format = CF_TEXT;
            pClipText = pAllocated;
-           type = (vim_strchr((char*)pClipText, '\r') != NULL) ? MLINE : MCHAR;
        }
  
        else if ((pAllocated = Win16GetClipboardData(CF_OEMTEXT)) != NULL)
        {
            clip_data_format = CF_OEMTEXT;
            pClipText = pAllocated;
-           type = (vim_strchr((char*)pClipText, '\r') != NULL) ? MLINE : MCHAR;
        }
  
        /* Did we get anything? */
--- 2280,2291 ----
*** ../mercurial/vim73/src/os_mswin.c   2011-01-17 20:08:04.000000000 +0100
--- src/os_mswin.c      2011-06-19 01:01:51.000000000 +0200
***************
*** 1410,1418 ****
      {
        char_u *temp_clipboard;
  
!       /* If the type is not known guess it. */
        if (metadata.type == -1)
!           metadata.type = (vim_strchr(str, '\n') == NULL) ? MCHAR : MLINE;
  
        /* Translate <CR><NL> into <NL>. */
        temp_clipboard = crnl_to_nl(str, &str_size);
--- 1410,1418 ----
      {
        char_u *temp_clipboard;
  
!       /* If the type is not known detect it. */
        if (metadata.type == -1)
!           metadata.type = MAUTO;
  
        /* Translate <CR><NL> into <NL>. */
        temp_clipboard = crnl_to_nl(str, &str_size);
*** ../mercurial/vim73/src/os_qnx.c     2010-05-15 21:22:11.000000000 +0200
--- src/os_qnx.c        2011-06-19 01:02:26.000000000 +0200
***************
*** 93,99 ****
            clip_length  = clip_header->length - 1;
  
            if( clip_text != NULL && is_type_set == FALSE )
!               type = (strchr( clip_text, '\r' ) != NULL) ? MLINE : MCHAR;
        }
  
        if( (clip_text != NULL) && (clip_length > 0) )
--- 93,99 ----
            clip_length  = clip_header->length - 1;
  
            if( clip_text != NULL && is_type_set == FALSE )
!               type = MAUTO;
        }
  
        if( (clip_text != NULL) && (clip_length > 0) )
*** ../mercurial/vim73/src/ui.c 2010-09-21 22:09:28.000000000 +0200
--- src/ui.c    2011-06-19 01:03:31.000000000 +0200
***************
*** 1609,1615 ****
  
  #if defined(FEAT_HANGULIN) || defined(PROTO)
      void
! push_raw_key (s, len)
      char_u  *s;
      int           len;
  {
--- 1609,1615 ----
  
  #if defined(FEAT_HANGULIN) || defined(PROTO)
      void
! push_raw_key(s, len)
      char_u  *s;
      int           len;
  {
***************
*** 2016,2022 ****
      long_u    *length;
      int               *format;
  {
!     int               motion_type;
      long_u    len;
      char_u    *p;
      char      **text_list = NULL;
--- 2016,2022 ----
      long_u    *length;
      int               *format;
  {
!     int               motion_type = MAUTO;
      long_u    len;
      char_u    *p;
      char      **text_list = NULL;
***************
*** 2036,2042 ****
        *(int *)success = FALSE;
        return;
      }
-     motion_type = MCHAR;
      p = (char_u *)value;
      len = *length;
      if (*type == vim_atom)
--- 2036,2041 ----
*** ../vim-7.3.220/src/version.c        2011-06-19 00:27:46.000000000 +0200
--- src/version.c       2011-06-19 01:03:59.000000000 +0200
***************
*** 711,712 ****
--- 711,714 ----
  {   /* Add new patch number below this line */
+ /**/
+     221,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
190. You quickly hand over your wallet, leather jacket, and car keys
     during a mugging, then proceed to beat the crap out of your
     assailant when he asks for your laptop.

 /// 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

Raspunde prin e-mail lui