diff --git a/7.4.305 b/7.4.305 new file mode 100644 index 0000000..7abb227 --- /dev/null +++ b/7.4.305 @@ -0,0 +1,276 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.4.305 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.4.305 +Problem: Making 'ttymouse' empty after the xterm version was requested + causes problems. (Elijah Griffin) +Solution: Do not check for DEC mouse sequences when the xterm version was + requested. Also don't request the xterm version when DEC mouse + was enabled. +Files: src/term.c, src/os_unix.c, src/proto/term.pro, src/globals.h + + +*** ../vim-7.4.304/src/term.c 2014-03-25 13:46:22.841832960 +0100 +--- src/term.c 2014-05-22 17:12:59.198299628 +0200 +*************** +*** 153,158 **** +--- 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[] = +*************** +*** 3259,3265 **** + may_req_termresponse(); + /* Immediately check for a response. If t_Co changes, we don't + * want to redraw with wrong colors first. */ +! if (crv_status != CRV_GET) + check_for_codes_from_term(); + } + #endif +--- 3264,3270 ---- + may_req_termresponse(); + /* Immediately check for a response. If t_Co changes, we don't + * want to redraw with wrong colors first. */ +! if (crv_status == CRV_SENT) + check_for_codes_from_term(); + } + #endif +*************** +*** 3306,3311 **** +--- 3311,3340 ---- + } + } + ++ #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 ++ # if defined(FEAT_TERMRESPONSE) ++ || xt_index_out > xt_index_in ++ # endif ++ ; ++ } ++ #endif ++ ++ + #if defined(FEAT_TERMRESPONSE) || defined(PROTO) + /* + * Request version string (for xterm) when needed. +*************** +*** 3319,3324 **** +--- 3348,3355 ---- + * 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 +*************** +*** 3332,3337 **** +--- 3363,3369 ---- + # ifdef UNIX + && isatty(1) + && isatty(read_cmd_fd) ++ && !xterm_conflict_mouse + # endif + && *T_CRV != NUL) + { +*************** +*** 5714,5722 **** + * 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() + { +--- 5746,5751 ---- +*** ../vim-7.4.304/src/os_unix.c 2014-05-13 20:19:53.573808877 +0200 +--- src/os_unix.c 2014-05-22 17:11:10.274301842 +0200 +*************** +*** 3667,3672 **** +--- 3667,3674 ---- + void + check_mouse_termcode() + { ++ xterm_conflict_mouse = FALSE; ++ + # ifdef FEAT_MOUSE_XTERM + if (use_xterm_mouse() + # ifdef FEAT_MOUSE_URXVT +*************** +*** 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 +--- 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 +*************** +*** 3738,3769 **** + # 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 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 as the dec mouse */ +! if (use_xterm_mouse() == 3 + # ifdef FEAT_GUI + && !gui.in_use + # endif +--- 3740,3779 ---- + # 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() && !did_request_esc_sequence() + # 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() && !did_request_esc_sequence() + # 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 && !did_request_esc_sequence() + # ifdef FEAT_GUI + && !gui.in_use + # endif +*************** +*** 3778,3783 **** +--- 3788,3794 ---- + mch_setmouse(FALSE); + setmouse(); + } ++ xterm_conflict_mouse = TRUE; + } + else + del_mouse_termcode(KS_URXVT_MOUSE); +*** ../vim-7.4.304/src/proto/term.pro 2013-09-29 16:27:42.000000000 +0200 +--- src/proto/term.pro 2014-05-22 16:58:25.806317380 +0200 +*************** +*** 34,39 **** +--- 34,40 ---- + void settmode __ARGS((int tmode)); + void starttermcap __ARGS((void)); + void stoptermcap __ARGS((void)); ++ int did_request_esc_sequence __ARGS((void)); + void may_req_termresponse __ARGS((void)); + void may_req_ambiguous_char_width __ARGS((void)); + int swapping_screen __ARGS((void)); +*** ../vim-7.4.304/src/globals.h 2014-04-06 20:45:40.123357453 +0200 +--- src/globals.h 2014-05-22 17:07:39.130306133 +0200 +*************** +*** 1333,1338 **** +--- 1333,1341 ---- + #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 */ +*** ../vim-7.4.304/src/version.c 2014-05-22 16:29:03.378353200 +0200 +--- src/version.c 2014-05-22 16:58:16.150317576 +0200 +*************** +*** 736,737 **** +--- 736,739 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 305, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +195. Your cat has its own home page. + + /// 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 ///