| To: vim_dev@googlegroups.com |
| Subject: Patch 7.4.305 |
| 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.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 |
| |
| |
| |
| |
| |
| *** 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 ---- |
| |
| |
| |
| *** 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); |
| |
| |
| |
| *** 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)); |
| |
| |
| |
| *** 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 */ |
| |
| |
| |
| *** 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 /// |