]> granicus.if.org Git - vim/commitdiff
updated for version 7.4.389 v7.4.389
authorBram Moolenaar <Bram@vim.org>
Wed, 30 Jul 2014 15:21:58 +0000 (17:21 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 30 Jul 2014 15:21:58 +0000 (17:21 +0200)
Problem:    Still sometimes Vim enters Replace mode when starting up.
Solution:   Use a different solution in detecting the termresponse and
            location response. (Hayaki Saito)

src/globals.h
src/os_unix.c
src/proto/term.pro
src/term.c
src/version.c

index b3310b368064a8de3ae316562d145eabd2ef94b5..77528c7b58cb0c494e8223c01ee3bcd903d52641 100644 (file)
@@ -1336,9 +1336,6 @@ EXTERN HWND       clientWindow INIT(= 0);
 #if defined(UNIX) || defined(VMS)
 EXTERN int     term_is_xterm INIT(= FALSE);    /* xterm-like 'term' */
 #endif
-#if defined(UNIX)
-EXTERN int     xterm_conflict_mouse INIT(= FALSE);
-#endif
 
 #ifdef BACKSLASH_IN_FILENAME
 EXTERN char    psepc INIT(= '\\');     /* normal path separator character */
index 033ce3cc3b9c07a4c69ddd9496d1b7818db60e7e..124c2693bc1dfd6029feaa186c8410af60503692 100644 (file)
@@ -3667,8 +3667,6 @@ mch_setmouse(on)
     void
 check_mouse_termcode()
 {
-    xterm_conflict_mouse = FALSE;
-
 # ifdef FEAT_MOUSE_XTERM
     if (use_xterm_mouse()
 # ifdef FEAT_MOUSE_URXVT
@@ -3713,7 +3711,7 @@ check_mouse_termcode()
 # endif
 
 # ifdef FEAT_MOUSE_JSB
-    /* There is no conflict, but it was disabled for xterm before. */
+    /* Conflicts with xterm mouse: "\033[" and "\033[M" ??? */
     if (!use_xterm_mouse()
 #  ifdef FEAT_GUI
            && !gui.in_use
@@ -3740,45 +3738,31 @@ check_mouse_termcode()
 # endif
 
 # ifdef FEAT_MOUSE_DEC
-    /* Conflicts with xterm mouse: "\033[" and "\033[M".
-     * Also conflicts with the xterm termresponse, skip this if it was
-     * requested already. */
+    /* Conflicts with xterm mouse: "\033[" and "\033[M" */
     if (!use_xterm_mouse()
-#  ifdef FEAT_TERMRESPONSE
-           && !did_request_esc_sequence()
-#  endif
 #  ifdef FEAT_GUI
            && !gui.in_use
 #  endif
            )
-    {
        set_mouse_termcode(KS_DEC_MOUSE, (char_u *)(term_is_8bit(T_NAME)
                     ? IF_EB("\233", CSI_STR) : IF_EB("\033[", ESC_STR "[")));
-       xterm_conflict_mouse = TRUE;
-    }
     else
        del_mouse_termcode(KS_DEC_MOUSE);
 # endif
 # ifdef FEAT_MOUSE_PTERM
-    /* same as the dec mouse */
+    /* same conflict as the dec mouse */
     if (!use_xterm_mouse()
-#  ifdef FEAT_TERMRESPONSE
-           && !did_request_esc_sequence()
-#  endif
 #  ifdef FEAT_GUI
            && !gui.in_use
 #  endif
            )
-    {
        set_mouse_termcode(KS_PTERM_MOUSE,
                                      (char_u *) IF_EB("\033[", ESC_STR "["));
-       xterm_conflict_mouse = TRUE;
-    }
     else
        del_mouse_termcode(KS_PTERM_MOUSE);
 # endif
 # ifdef FEAT_MOUSE_URXVT
-    /* same as the dec mouse */
+    /* same conflict as the dec mouse */
     if (use_xterm_mouse() == 3
 #  ifdef FEAT_GUI
            && !gui.in_use
@@ -3794,8 +3778,6 @@ check_mouse_termcode()
            mch_setmouse(FALSE);
            setmouse();
        }
-       /* It's OK to request the xterm version for uxterm. */
-       resume_get_esc_sequence();
     }
     else
        del_mouse_termcode(KS_URXVT_MOUSE);
index 89d58a0d0f74f5123ec56356c7459d9d28c397b9..b3d0df39d81ba968b0ce989363605a4fa2b7bee7 100644 (file)
@@ -34,8 +34,6 @@ void set_shellsize __ARGS((int width, int height, int mustset));
 void settmode __ARGS((int tmode));
 void starttermcap __ARGS((void));
 void stoptermcap __ARGS((void));
-int did_request_esc_sequence __ARGS((void));
-void resume_get_esc_sequence __ARGS((void));
 void may_req_termresponse __ARGS((void));
 void may_req_ambiguous_char_width __ARGS((void));
 int swapping_screen __ARGS((void));
index 95c29ccf48d3424449e8091cd99c730e3ce7e074..a1ab537295675bc8c23c1603d1d3af6b55423d46 100644 (file)
@@ -153,11 +153,6 @@ char *UP, *BC, PC;
 static char_u *vim_tgetstr __ARGS((char *s, char_u **pp));
 #endif /* HAVE_TGETENT */
 
-#if defined(FEAT_TERMRESPONSE)
-static int xt_index_in = 0;
-static int xt_index_out = 0;
-#endif
-
 static int  detected_8bit = FALSE;     /* detected 8-bit terminal */
 
 static struct builtin_term builtin_termcaps[] =
@@ -3312,40 +3307,6 @@ stoptermcap()
 }
 
 #if defined(FEAT_TERMRESPONSE) || defined(PROTO)
-# if defined(UNIX) || defined(PROTO)
-/*
- * Return TRUE when the xterm version was requested or anything else that
- * would send an ESC sequence back to Vim.
- * If not sent yet, prevent it from being sent soon.
- * Used to check whether it is OK to enable checking for DEC mouse codes,
- * which conflict with may xterm ESC sequences.
- */
-    int
-did_request_esc_sequence()
-{
-    if (crv_status == CRV_GET)
-       crv_status = 0;
-    if (u7_status == U7_GET)
-       u7_status = 0;
-    return crv_status == CRV_SENT || u7_status == U7_SENT
-                                               || xt_index_out > xt_index_in;
-}
-
-/*
- * If requesting the version was disabled in did_request_esc_sequence(),
- * enable it again.
- */
-    void
-resume_get_esc_sequence()
-{
-    if (crv_status == 0)
-       crv_status = CRV_GET;
-    if (u7_status == 0)
-       u7_status = U7_GET;
-}
-# endif
-
-
 /*
  * Request version string (for xterm) when needed.
  * Only do this after switching to raw mode, otherwise the result will be
@@ -3358,8 +3319,6 @@ resume_get_esc_sequence()
  * Insert mode.
  * On Unix only do it when both output and input are a tty (avoid writing
  * request to terminal while reading from a file).
- * Do not do this when a mouse is being detected that starts with the same ESC
- * sequence as the termresponse.
  * The result is caught in check_termcode().
  */
     void
@@ -3373,7 +3332,6 @@ may_req_termresponse()
 # ifdef UNIX
            && isatty(1)
            && isatty(read_cmd_fd)
-           && !xterm_conflict_mouse
 # endif
            && *T_CRV != NUL)
     {
@@ -3742,8 +3700,8 @@ add_termcode(name, string, flags)
 #if defined(WIN3264) && !defined(FEAT_GUI)
     if (s[0] == K_NUL)
     {
-        STRMOVE(s + 1, s);
-        s[1] = 3;
+       STRMOVE(s + 1, s);
+       s[1] = 3;
     }
 #endif
 
@@ -4212,24 +4170,31 @@ check_termcode(max_offset, buf, bufsize, buflen)
 
 #ifdef FEAT_TERMRESPONSE
        if (key_name[0] == NUL
-           /* URXVT mouse uses <ESC>[#;#;#M, but we are matching <ESC>[ */
+           /* Mouse codes of DEC, pterm, and URXVT start with <ESC>[.  When
+            * detecting the start of these mouse codes they might as well be
+            * another key code or terminal response. */
+# ifdef FEAT_MOUSE_DEC
+           || key_name[0] == KS_DEC_MOUSE
+# endif
+# ifdef FEAT_MOUSE_PTERM
+           || key_name[0] == KS_PTERM_MOUSE
+# endif
+# ifdef FEAT_MOUSE_URXVT
            || key_name[0] == KS_URXVT_MOUSE
-# ifdef FEAT_MBYTE
-           || u7_status == U7_SENT
 # endif
-            )
+          )
        {
-           /* Check for some responses from terminal start with "<Esc>[" or
-            * CSI.
+           /* Check for some responses from the terminal starting with
+            * "<Esc>[" or CSI:
             *
-            * - xterm version string: <Esc>[>{x};{vers};{y}c
+            * - Xterm version string: <Esc>[>{x};{vers};{y}c
             *   Also eat other possible responses to t_RV, rxvt returns
             *   "<Esc>[?1;2c". Also accept CSI instead of <Esc>[.
             *   mrxvt has been reported to have "+" in the version. Assume
             *   the escape sequence ends with a letter or one of "{|}~".
             *
-            * - cursor position report: <Esc>[{row};{col}R
-            *   The final byte is 'R'. now it is only used for checking for
+            * - Cursor position report: <Esc>[{row};{col}R
+            *   The final byte must be 'R'. It is used for checking the
             *   ambiguous-width character state.
             */
            p = tp[0] == CSI ? tp + 1 : tp + 2;
@@ -4269,36 +4234,42 @@ check_termcode(max_offset, buf, bufsize, buflen)
                 * 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)
+               if (j == 1 && tp[i] == 'R')
                {
-                   char *aw = NULL;
+                   if (row_char == '2' && col >= 2)
+                   {
+                       char *aw = NULL;
 
-                   LOG_TR("Received U7 status");
-                   u7_status = U7_GOT;
+                       LOG_TR("Received U7 status");
+                       u7_status = U7_GOT;
 # ifdef FEAT_AUTOCMD
-                   did_cursorhold = TRUE;
+                       did_cursorhold = TRUE;
 # endif
-                   if (col == 2)
-                       aw = "single";
-                   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
+                       if (col == 2)
+                           aw = "single";
+                       else if (col == 3)
+                           aw = "double";
+                       if (aw != NULL && STRCMP(aw, p_ambw) != 0)
                        {
-                           char buf[100];
-                           int  r = redraw_asap(CLEAR);
+                           /* 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
+                           {
+                               char buf[100];
+                               int  r = redraw_asap(CLEAR);
 
-                           sprintf(buf, "set 'ambiwidth', redraw_asap(): %d",
-                                                                          r);
-                           log_tr(buf);
-                       }
+                               sprintf(buf,
+                                       "set 'ambiwidth', redraw_asap(): %d",
+                                       r);
+                               log_tr(buf);
+                           }
 # else
-                       redraw_asap(CLEAR);
+                           redraw_asap(CLEAR);
 # endif
+                       }
                    }
                    key_name[0] = (int)KS_EXTRA;
                    key_name[1] = (int)KE_IGNORE;
@@ -4563,19 +4534,19 @@ check_termcode(max_offset, buf, bufsize, buflen)
                        return -1;
 
                    /* when mouse reporting is SGR, add 32 to mouse code */
-                    if (key_name[0] == KS_SGR_MOUSE)
-                        mouse_code += 32;
+                   if (key_name[0] == KS_SGR_MOUSE)
+                       mouse_code += 32;
 
                    mouse_col = getdigits(&p) - 1;
                    if (*p++ != ';')
                        return -1;
 
                    mouse_row = getdigits(&p) - 1;
-                    if (key_name[0] == KS_SGR_MOUSE && *p == 'm')
+                   if (key_name[0] == KS_SGR_MOUSE && *p == 'm')
                        mouse_code |= MOUSE_RELEASE;
-                    else if (*p != 'M')
+                   else if (*p != 'M')
                        return -1;
-                    p++;
+                   p++;
 
                    slen += (int)(p - (tp + slen));
 
@@ -4592,7 +4563,7 @@ check_termcode(max_offset, buf, bufsize, buflen)
                        for (slen2 = slen; slen2 < len; slen2++)
                        {
                            if (tp[slen2] == 'M'
-                                || (key_name[0] == KS_SGR_MOUSE
+                                   || (key_name[0] == KS_SGR_MOUSE
                                                         && tp[slen2] == 'm'))
                            {
                                cmd_complete = 1;
@@ -5769,6 +5740,9 @@ show_one_termcode(name, code, printit)
  * termcap codes from the terminal itself.
  * We get them one by one to avoid a very long response string.
  */
+static int xt_index_in = 0;
+static int xt_index_out = 0;
+
     static void
 req_codes_from_term()
 {
index d80a08aa65f42e3b1337419124f4e4954a758faa..d5aaa905001883c601fffe39ea7dcdfbf16c86eb 100644 (file)
@@ -734,6 +734,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    389,
 /**/
     388,
 /**/