# HG changeset patch # User Bram Moolenaar # Date 1319665700 -7200 # Node ID 12bb368fef2c8c5478f0f8905aac381a56a75fe0 # Parent 851be4a41033b842142660c2591daac85b553301 updated for version 7.3.353 Problem: Missing part of the urxvt patch. Solution: Add the change in term.c diff --git a/src/term.c b/src/term.c --- a/src/term.c +++ b/src/term.c @@ -4008,7 +4008,9 @@ check_termcode(max_offset, buf, buflen) } #ifdef FEAT_TERMRESPONSE - if (key_name[0] == NUL) + if (key_name[0] == NUL + /* URXVT mouse uses [#;#;#M, but we are matching [ */ + || key_name[0] == KS_URXVT_MOUSE) { /* Check for xterm version string: "[>{x};{vers};{y}c". Also * eat other possible responses to t_RV, rxvt returns @@ -4047,7 +4049,7 @@ check_termcode(max_offset, buf, buflen) if (tp[1 + (tp[0] != CSI)] == '>' && j == 2) { /* if xterm version >= 95 use mouse dragging */ - if (extra >= 95) + if (extra >= 95 && ttym_flags != TTYM_URXVT) set_option_value((char_u *)"ttym", 0L, (char_u *)"xterm2", 0); /* if xterm version >= 141 try to get termcap codes */ @@ -4141,6 +4143,9 @@ check_termcode(max_offset, buf, buflen) # ifdef FEAT_MOUSE_PTERM || key_name[0] == (int)KS_PTERM_MOUSE # endif +# ifdef FEAT_MOUSE_URXVT + || key_name[0] == (int)KS_URXVT_MOUSE +# endif ) { is_click = is_drag = FALSE; @@ -4219,7 +4224,69 @@ check_termcode(max_offset, buf, buflen) else break; } - + } + +# ifdef FEAT_MOUSE_URXVT + if (key_name[0] == (int)KS_URXVT_MOUSE) + { + for (;;) + { + /* URXVT 1015 mouse reporting mode: + * Almost identical to xterm mouse mode, except the values + * are decimal instead of bytes. + * + * \033[%d;%d;%dM + * ^-- row + * ^----- column + * ^-------- code + */ + p = tp + slen; + + mouse_code = getdigits(&p); + if (*p++ != ';') + return -1; + + mouse_col = getdigits(&p) - 1; + if (*p++ != ';') + return -1; + + mouse_row = getdigits(&p) - 1; + if (*p++ != 'M') + return -1; + + slen += (int)(p - (tp + slen)); + + /* skip this one if next one has same code (like xterm + * case) */ + j = termcodes[idx].len; + if (STRNCMP(tp, tp + slen, (size_t)j) == 0) { + /* check if the command is complete by looking for the + * M */ + int slen2; + int cmd_complete = 0; + for (slen2 = slen; slen2 < len; slen2++) { + if (tp[slen2] == 'M') { + cmd_complete = 1; + break; + } + } + p += j; + if (cmd_complete && getdigits(&p) == mouse_code) { + slen += j; /* skip the \033[ */ + continue; + } + } + break; + } + } +# endif + + if (key_name[0] == (int)KS_MOUSE +#ifdef FEAT_MOUSE_URXVT + || key_name[0] == (int)KS_URXVT_MOUSE +#endif + ) + { # if !defined(MSWIN) && !defined(MSDOS) /* * Handle mouse events. diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -715,6 +715,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 353, +/**/ 352, /**/ 351,