Patch 7.4.389
Problem:    Still sometimes Vim enters Replace mode when starting up.
Solution:   Use a different solution in detecting the termresponse and
            location response. (Hayaki Saito)
Files:      src/globals.h, src/os_unix.c, src/term.c, src/proto/term.pro


*** ../vim-7.4.388/src/globals.h        2014-06-12 14:01:27.575769788 +0200
--- src/globals.h       2014-07-30 17:02:57.711526671 +0200
***************
*** 1336,1344 ****
  #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 */
--- 1336,1341 ----
*** ../vim-7.4.388/src/os_unix.c        2014-07-09 19:13:45.007701718 +0200
--- src/os_unix.c       2014-07-30 17:06:02.375525344 +0200
***************
*** 3667,3674 ****
      void
  check_mouse_termcode()
  {
-     xterm_conflict_mouse = FALSE;
- 
  # ifdef FEAT_MOUSE_XTERM
      if (use_xterm_mouse()
  # ifdef FEAT_MOUSE_URXVT
--- 3667,3672 ----
***************
*** 3713,3719 ****
  # endif
  
  # ifdef FEAT_MOUSE_JSB
!     /* There is no conflict, but it was disabled for xterm before. */
      if (!use_xterm_mouse()
  #  ifdef FEAT_GUI
            && !gui.in_use
--- 3711,3717 ----
  # endif
  
  # ifdef FEAT_MOUSE_JSB
!     /* Conflicts with xterm mouse: "\033[" and "\033[M" ??? */
      if (!use_xterm_mouse()
  #  ifdef FEAT_GUI
            && !gui.in_use
***************
*** 3740,3784 ****
  # 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. */
      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 */
      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 */
      if (use_xterm_mouse() == 3
  #  ifdef FEAT_GUI
            && !gui.in_use
--- 3738,3768 ----
  # endif
  
  # ifdef FEAT_MOUSE_DEC
!     /* Conflicts with xterm mouse: "\033[" and "\033[M" */
      if (!use_xterm_mouse()
  #  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 "[")));
      else
        del_mouse_termcode(KS_DEC_MOUSE);
  # endif
  # ifdef FEAT_MOUSE_PTERM
!     /* same conflict as the dec mouse */
      if (!use_xterm_mouse()
  #  ifdef FEAT_GUI
            && !gui.in_use
  #  endif
            )
        set_mouse_termcode(KS_PTERM_MOUSE,
                                      (char_u *) IF_EB("\033[", ESC_STR "["));
      else
        del_mouse_termcode(KS_PTERM_MOUSE);
  # endif
  # ifdef FEAT_MOUSE_URXVT
!     /* same conflict as the dec mouse */
      if (use_xterm_mouse() == 3
  #  ifdef FEAT_GUI
            && !gui.in_use
***************
*** 3794,3801 ****
            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);
--- 3778,3783 ----
*** ../vim-7.4.388/src/term.c   2014-07-09 20:51:04.519583033 +0200
--- src/term.c  2014-07-30 17:20:54.915518929 +0200
***************
*** 153,163 ****
  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[] =
--- 153,158 ----
***************
*** 3312,3351 ****
  }
  
  #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
--- 3307,3312 ----
***************
*** 3358,3365 ****
   * 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
--- 3319,3324 ----
***************
*** 3373,3379 ****
  # ifdef UNIX
            && isatty(1)
            && isatty(read_cmd_fd)
-           && !xterm_conflict_mouse
  # endif
            && *T_CRV != NUL)
      {
--- 3332,3337 ----
***************
*** 3742,3749 ****
  #if defined(WIN3264) && !defined(FEAT_GUI)
      if (s[0] == K_NUL)
      {
!         STRMOVE(s + 1, s);
!         s[1] = 3;
      }
  #endif
  
--- 3700,3707 ----
  #if defined(WIN3264) && !defined(FEAT_GUI)
      if (s[0] == K_NUL)
      {
!       STRMOVE(s + 1, s);
!       s[1] = 3;
      }
  #endif
  
***************
*** 4212,4235 ****
  
  #ifdef FEAT_TERMRESPONSE
        if (key_name[0] == NUL
!           /* URXVT mouse uses <ESC>[#;#;#M, but we are matching <ESC>[ */
            || 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.
             *
!            * - 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
             *   ambiguous-width character state.
             */
            p = tp[0] == CSI ? tp + 1 : tp + 2;
--- 4170,4200 ----
  
  #ifdef FEAT_TERMRESPONSE
        if (key_name[0] == NUL
!           /* 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
  # endif
!          )
        {
!           /* Check for some responses from the terminal starting with
!            * "<Esc>[" or CSI:
             *
!            * - 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 must be 'R'. It is used for checking the
             *   ambiguous-width character state.
             */
            p = tp[0] == CSI ? tp + 1 : tp + 2;
***************
*** 4269,4304 ****
                 * 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;
  
!                   LOG_TR("Received U7 status");
!                   u7_status = U7_GOT;
  # ifdef FEAT_AUTOCMD
!                   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
                        {
!                           char buf[100];
!                           int  r = redraw_asap(CLEAR);
  
!                           sprintf(buf, "set 'ambiwidth', redraw_asap(): %d",
!                                                                          r);
!                           log_tr(buf);
!                       }
  # else
!                       redraw_asap(CLEAR);
  # endif
                    }
                    key_name[0] = (int)KS_EXTRA;
                    key_name[1] = (int)KE_IGNORE;
--- 4234,4275 ----
                 * 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')
                {
!                   if (row_char == '2' && col >= 2)
!                   {
!                       char *aw = NULL;
  
!                       LOG_TR("Received U7 status");
!                       u7_status = U7_GOT;
  # ifdef FEAT_AUTOCMD
!                       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
!                           {
!                               char buf[100];
!                               int  r = redraw_asap(CLEAR);
  
!                               sprintf(buf,
!                                       "set 'ambiwidth', redraw_asap(): %d",
!                                       r);
!                               log_tr(buf);
!                           }
  # else
!                           redraw_asap(CLEAR);
  # endif
+                       }
                    }
                    key_name[0] = (int)KS_EXTRA;
                    key_name[1] = (int)KE_IGNORE;
***************
*** 4563,4581 ****
                        return -1;
  
                    /* when mouse reporting is SGR, add 32 to mouse code */
!                     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')
                        mouse_code |= MOUSE_RELEASE;
!                     else if (*p != 'M')
                        return -1;
!                     p++;
  
                    slen += (int)(p - (tp + slen));
  
--- 4534,4552 ----
                        return -1;
  
                    /* when mouse reporting is SGR, add 32 to mouse code */
!                   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')
                        mouse_code |= MOUSE_RELEASE;
!                   else if (*p != 'M')
                        return -1;
!                   p++;
  
                    slen += (int)(p - (tp + slen));
  
***************
*** 4592,4598 ****
                        for (slen2 = slen; slen2 < len; slen2++)
                        {
                            if (tp[slen2] == 'M'
!                                 || (key_name[0] == KS_SGR_MOUSE
                                                         && tp[slen2] == 'm'))
                            {
                                cmd_complete = 1;
--- 4563,4569 ----
                        for (slen2 = slen; slen2 < len; slen2++)
                        {
                            if (tp[slen2] == 'M'
!                                   || (key_name[0] == KS_SGR_MOUSE
                                                         && tp[slen2] == 'm'))
                            {
                                cmd_complete = 1;
***************
*** 5769,5774 ****
--- 5740,5748 ----
   * 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()
  {
*** ../vim-7.4.388/src/proto/term.pro   2014-07-09 19:13:45.007701718 +0200
--- src/proto/term.pro  2014-07-30 17:04:40.791525930 +0200
***************
*** 34,41 ****
  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));
--- 34,39 ----
*** ../vim-7.4.388/src/version.c        2014-07-30 16:44:17.503534723 +0200
--- src/version.c       2014-07-30 17:03:13.715526556 +0200
***************
*** 736,737 ****
--- 736,739 ----
  {   /* Add new patch number below this line */
+ /**/
+     389,
  /**/

-- 
The only way the average employee can speak to an executive is by taking a
second job as a golf caddie.
                                (Scott Adams - The Dilbert principle)

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui