]> granicus.if.org Git - vim/commitdiff
updated for version 7.3.946 v7.3.946
authorBram Moolenaar <Bram@vim.org>
Wed, 15 May 2013 12:22:41 +0000 (14:22 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 15 May 2013 12:22:41 +0000 (14:22 +0200)
Problem:    Sometimes get stuck in waiting for cursor position report,
            resulting in keys starting with <Esc>[ not working.
Solution:   Only wait for more characters after <Esc>[ if followed by '?', '>'
            or a digit.

src/term.c
src/version.c

index 97bf62ac42346b4d94c1829c5583ab2d63d41e8c..003dd8b1accd618c56b292d67d5d195d7c944c8b 100644 (file)
@@ -4126,9 +4126,11 @@ check_termcode(max_offset, buf, bufsize, buflen)
             *   The final byte is 'R'. now it is only used for checking for
             *   ambiguous-width character state.
             */
+           p = tp[0] == CSI ? tp + 1 : tp + 2;
            if ((*T_CRV != NUL || *T_U7 != NUL)
                        && ((tp[0] == ESC && tp[1] == '[' && len >= 3)
-                           || (tp[0] == CSI && len >= 2)))
+                           || (tp[0] == CSI && len >= 2))
+                       && (VIM_ISDIGIT(*p) || *p == '>' || *p == '?'))
            {
                j = 0;
                extra = 0;
@@ -4136,7 +4138,7 @@ check_termcode(max_offset, buf, bufsize, buflen)
                                && !(tp[i] >= '{' && tp[i] <= '~')
                                && !ASCII_ISALPHA(tp[i]); ++i)
                    if (tp[i] == ';' && ++j == 1)
-                       extra = atoi((char *)tp + i + 1);
+                       extra = i + 1;
                if (i == len)
                    return -1;          /* not enough characters */
 
@@ -4150,6 +4152,8 @@ 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)
                        aw = "single";
                    else if (extra == 3)
@@ -4178,6 +4182,8 @@ check_termcode(max_offset, buf, bufsize, buflen)
                    /* rxvt sends its version number: "20703" is 2.7.3.
                     * Ignore it for when the user has set 'term' to xterm,
                     * even though it's an rxvt. */
+                   if (extra > 0)
+                       extra = atoi((char *)tp + extra);
                    if (extra > 20000)
                        extra = 0;
 
index 76d652079d6dfc21fb72d6d4446d14905836c4ac..5e5dbc4b6e6cd96ec96e1a54decfb371a14d6524 100644 (file)
@@ -728,6 +728,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    946,
 /**/
     945,
 /**/