summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2011-06-19 01:14:29 +0200
committerBram Moolenaar <Bram@vim.org>2011-06-19 01:14:29 +0200
commitd44347f1e7791ead2d90b1fda06d9f4e325d912e (patch)
treed00df322e29d233a3845b5c12c3973375dc4a073
parent19e609437873594b8b08aaceafbe81ef235044bf (diff)
downloadvim-git-7.3.221.tar.gz
updated for version 7.3.221v7.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.
-rw-r--r--src/gui_gtk_x11.c3
-rw-r--r--src/gui_mac.c2
-rw-r--r--src/ops.c18
-rw-r--r--src/os_msdos.c4
-rw-r--r--src/os_mswin.c4
-rw-r--r--src/os_qnx.c2
-rw-r--r--src/ui.c5
-rw-r--r--src/version.c2
8 files changed, 22 insertions, 18 deletions
diff --git a/src/gui_gtk_x11.c b/src/gui_gtk_x11.c
index 0454afb7b..77be9767b 100644
--- a/src/gui_gtk_x11.c
+++ b/src/gui_gtk_x11.c
@@ -1173,7 +1173,7 @@ selection_received_cb(GtkWidget *widget UNUSED,
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 UNUSED,
text = (char_u *)data->data;
len = data->length;
- motion_type = MCHAR;
if (text == NULL || len <= 0)
{
diff --git a/src/gui_mac.c b/src/gui_mac.c
index 2c3356248..0a8b0bcc5 100644
--- a/src/gui_mac.c
+++ b/src/gui_mac.c
@@ -4671,7 +4671,7 @@ clip_mch_request_selection(VimClipboard *cbd)
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);
diff --git a/src/ops.c b/src/ops.c
index c41f84456..8c235220e 100644
--- 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, must_append, yank_type, block_len)
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, must_append, yank_type, block_len)
* 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, blocklen)
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
*/
diff --git a/src/os_msdos.c b/src/os_msdos.c
index 1b52d72c4..3449d23b9 100644
--- a/src/os_msdos.c
+++ b/src/os_msdos.c
@@ -2232,7 +2232,7 @@ clip_mch_lose_selection(VimClipboard *cbd)
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 *cbd)
{
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? */
diff --git a/src/os_mswin.c b/src/os_mswin.c
index 8be2d40af..1a6ccb5c9 100644
--- a/src/os_mswin.c
+++ b/src/os_mswin.c
@@ -1410,9 +1410,9 @@ clip_mch_request_selection(VimClipboard *cbd)
{
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);
diff --git a/src/os_qnx.c b/src/os_qnx.c
index 1a7250eab..84b6a1cf7 100644
--- a/src/os_qnx.c
+++ b/src/os_qnx.c
@@ -93,7 +93,7 @@ clip_mch_request_selection( VimClipboard *cbd )
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) )
diff --git a/src/ui.c b/src/ui.c
index 9d940b1c4..82d83d3af 100644
--- a/src/ui.c
+++ b/src/ui.c
@@ -1609,7 +1609,7 @@ add_to_input_buf_csi(char_u *str, int len)
#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, sel_atom, type, value, length,
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, sel_atom, type, value, length,
*(int *)success = FALSE;
return;
}
- motion_type = MCHAR;
p = (char_u *)value;
len = *length;
if (*type == vim_atom)
diff --git a/src/version.c b/src/version.c
index 7d75de880..9832bef13 100644
--- 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,