summaryrefslogtreecommitdiffstats
path: root/patches/source/vim/patches/7.4.389
diff options
context:
space:
mode:
Diffstat (limited to 'patches/source/vim/patches/7.4.389')
-rw-r--r--patches/source/vim/patches/7.4.389490
1 files changed, 490 insertions, 0 deletions
diff --git a/patches/source/vim/patches/7.4.389 b/patches/source/vim/patches/7.4.389
new file mode 100644
index 000000000..6778941a1
--- /dev/null
+++ b/patches/source/vim/patches/7.4.389
@@ -0,0 +1,490 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 7.4.389
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+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 -- Bram@Moolenaar.net -- 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 ///