]> granicus.if.org Git - vim/commitdiff
updated for version 7.4.207 v7.4.207
authorBram Moolenaar <Bram@vim.org>
Wed, 19 Mar 2014 13:01:57 +0000 (14:01 +0100)
committerBram Moolenaar <Bram@vim.org>
Wed, 19 Mar 2014 13:01:57 +0000 (14:01 +0100)
Problem:    The cursor report sequence is sometimes not recognized and results
            in entering replace mode.
Solution:   Also check for the cursor report when not asked for.

src/term.c
src/version.c

index 763f8e782fe89d417cd9750cfabd8e36ac4b718e..699e356f92853b880bbbc486083f078d82f06f68 100644 (file)
@@ -3379,7 +3379,8 @@ may_req_ambiguous_char_width()
         out_str(buf);
         out_str(T_U7);
         u7_status = U7_SENT;
-        term_windgoto(0, 0);
+        out_flush();
+        term_windgoto(1, 0);
         out_str((char_u *)"  ");
         term_windgoto(0, 0);
         /* check for the characters now, otherwise they might be eaten by
@@ -4185,24 +4186,38 @@ check_termcode(max_offset, buf, bufsize, buflen)
                            || (tp[0] == CSI && len >= 2))
                        && (VIM_ISDIGIT(*p) || *p == '>' || *p == '?'))
            {
+#ifdef FEAT_MBYTE
+               int col;
+               int row_char;
+#endif
                j = 0;
                extra = 0;
                for (i = 2 + (tp[0] != CSI); i < len
                                && !(tp[i] >= '{' && tp[i] <= '~')
                                && !ASCII_ISALPHA(tp[i]); ++i)
                    if (tp[i] == ';' && ++j == 1)
+                   {
                        extra = i + 1;
+#ifdef FEAT_MBYTE
+                       row_char = tp[i - 1];
+#endif
+                   }
                if (i == len)
                {
                    LOG_TR("Not enough characters for CRV");
                    return -1;
                }
-
 #ifdef FEAT_MBYTE
-               /* Eat it when it has 2 arguments and ends in 'R'. Ignore it
-                * when u7_status is not "sent", <S-F3> sends something
-                * similar. */
-               if (j == 1 && tp[i] == 'R' && u7_status == U7_SENT)
+               if (extra > 0)
+                   col = atoi((char *)tp + extra);
+               else
+                   col = 0;
+
+               /* Eat it when it has 2 arguments and ends in 'R'. Also when
+                * u7_status is not "sent", it may be from a previous Vim that
+                * just exited.  But not for <S-F3>, it sends something
+                * similar, check for row and column to make sense. */
+               if (j == 1 && tp[i] == 'R' && row_char == '2' && col >= 2)
                {
                    char *aw = NULL;
 
@@ -4211,18 +4226,16 @@ check_termcode(max_offset, buf, bufsize, buflen)
 # ifdef FEAT_AUTOCMD
                    did_cursorhold = TRUE;
 # endif
-                   if (extra > 0)
-                       extra = atoi((char *)tp + extra);
-                   if (extra == 2)
+                   if (col == 2)
                        aw = "single";
-                   else if (extra == 3)
+                   else if (col == 3)
                        aw = "double";
                    if (aw != NULL && STRCMP(aw, p_ambw) != 0)
                    {
                        /* Setting the option causes a screen redraw. Do that
                         * right away if possible, keeping any messages. */
                        set_option_value((char_u *)"ambw", 0L, (char_u *)aw, 0);
-#ifdef DEBUG_TERMRESPONSE
+# ifdef DEBUG_TERMRESPONSE
                        {
                            char buf[100];
                            int  r = redraw_asap(CLEAR);
@@ -4231,9 +4244,9 @@ check_termcode(max_offset, buf, bufsize, buflen)
                                                                           r);
                            log_tr(buf);
                        }
-#else
+# else
                        redraw_asap(CLEAR);
-#endif
+# endif
                    }
                    key_name[0] = (int)KS_EXTRA;
                    key_name[1] = (int)KE_IGNORE;
index aabc366b0c5f43e8ca9e0c0f2a2b5ac22e425996..7ee3b6828ca95f26904b134099c7e6fe2b3799b4 100644 (file)
@@ -738,6 +738,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    207,
 /**/
     206,
 /**/