changeset 2896:fd4224d9ee09 v7.3.221

updated for version 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.
author Bram Moolenaar <bram@vim.org>
date Sun, 19 Jun 2011 01:14:29 +0200
parents 307eb4bcc51a
children 1af5b00a3b8d
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 src/version.c
diffstat 8 files changed, 22 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/src/gui_gtk_x11.c
+++ b/src/gui_gtk_x11.c
@@ -1173,7 +1173,7 @@ selection_received_cb(GtkWidget		*widget
     char_u	    *tmpbuf = NULL;
     guchar	    *tmpbuf_utf8 = NULL;
     int		    len;
-    int		    motion_type;
+    int		    motion_type = MAUTO;
 
     if (data->selection == clip_plus.gtk_sel_atom)
 	cbd = &clip_plus;
@@ -1182,7 +1182,6 @@ selection_received_cb(GtkWidget		*widget
 
     text = (char_u *)data->data;
     len  = data->length;
-    motion_type = MCHAR;
 
     if (text == NULL || len <= 0)
     {
--- a/src/gui_mac.c
+++ b/src/gui_mac.c
@@ -4671,7 +4671,7 @@ clip_mch_request_selection(VimClipboard 
     if (flavor)
 	type = **textOfClip;
     else
-	type = (strchr(*textOfClip, '\r') != NULL) ? MLINE : MCHAR;
+	type = MAUTO;
 
     tempclip = lalloc(scrapSize + 1, TRUE);
     mch_memmove(tempclip, *textOfClip + flavor, scrapSize);
--- a/src/ops.c
+++ b/src/ops.c
@@ -5733,7 +5733,9 @@ clip_get_selection(cbd)
     }
 }
 
-/* Convert from the GUI selection string into the '*'/'+' register */
+/*
+ * Convert from the GUI selection string into the '*'/'+' register.
+ */
     void
 clip_yank_selection(type, str, len, cbd)
     int		type;
@@ -6090,9 +6092,6 @@ write_reg_contents_ex(name, str, maxlen,
     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
@@ -6113,13 +6112,14 @@ write_reg_contents_ex(name, str, maxlen,
  * is appended.
  */
     static void
-str_to_reg(y_ptr, type, str, len, blocklen)
+str_to_reg(y_ptr, yank_type, str, len, blocklen)
     struct yankreg	*y_ptr;		/* pointer to yank register */
-    int			type;		/* MCHAR, MLINE or MBLOCK */
+    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,6 +6136,12 @@ str_to_reg(y_ptr, type, str, len, blockl
     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
      */
--- a/src/os_msdos.c
+++ b/src/os_msdos.c
@@ -2232,7 +2232,7 @@ clip_mch_lose_selection(VimClipboard *cb
     void
 clip_mch_request_selection(VimClipboard *cbd)
 {
-    int		type = MCHAR;
+    int		type = MAUTO;
     char_u	*pAllocated = NULL;
     char_u	*pClipText = NULL;
     int		clip_data_format = 0;
@@ -2280,14 +2280,12 @@ clip_mch_request_selection(VimClipboard 
 	{
 	    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? */
--- a/src/os_mswin.c
+++ b/src/os_mswin.c
@@ -1410,9 +1410,9 @@ clip_mch_request_selection(VimClipboard 
     {
 	char_u *temp_clipboard;
 
-	/* If the type is not known guess it. */
+	/* If the type is not known detect it. */
 	if (metadata.type == -1)
-	    metadata.type = (vim_strchr(str, '\n') == NULL) ? MCHAR : MLINE;
+	    metadata.type = MAUTO;
 
 	/* Translate <CR><NL> into <NL>. */
 	temp_clipboard = crnl_to_nl(str, &str_size);
--- a/src/os_qnx.c
+++ b/src/os_qnx.c
@@ -93,7 +93,7 @@ clip_mch_request_selection( VimClipboard
 	    clip_length  = clip_header->length - 1;
 
 	    if( clip_text != NULL && is_type_set == FALSE )
-		type = (strchr( clip_text, '\r' ) != NULL) ? MLINE : MCHAR;
+		type = MAUTO;
 	}
 
 	if( (clip_text != NULL) && (clip_length > 0) )
--- a/src/ui.c
+++ b/src/ui.c
@@ -1609,7 +1609,7 @@ add_to_input_buf_csi(char_u *str, int le
 
 #if defined(FEAT_HANGULIN) || defined(PROTO)
     void
-push_raw_key (s, len)
+push_raw_key(s, len)
     char_u  *s;
     int	    len;
 {
@@ -2016,7 +2016,7 @@ clip_x11_request_selection_cb(w, success
     long_u	*length;
     int		*format;
 {
-    int		motion_type;
+    int		motion_type = MAUTO;
     long_u	len;
     char_u	*p;
     char	**text_list = NULL;
@@ -2036,7 +2036,6 @@ clip_x11_request_selection_cb(w, success
 	*(int *)success = FALSE;
 	return;
     }
-    motion_type = MCHAR;
     p = (char_u *)value;
     len = *length;
     if (*type == vim_atom)
--- a/src/version.c
+++ b/src/version.c
@@ -710,6 +710,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    221,
+/**/
     220,
 /**/
     219,