diff options
author | Bram Moolenaar <Bram@vim.org> | 2011-10-26 23:48:20 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2011-10-26 23:48:20 +0200 |
commit | 1dff76bcb88e657556177e653f931129799a863e (patch) | |
tree | f69141e835e0a5894fcc7b2289344dda5c8f8ec0 /src | |
parent | db710ed999edf318477ae12d95f66519f2b21bbf (diff) | |
download | vim-1dff76bcb88e657556177e653f931129799a863e.zip |
updated for version 7.3.353
Problem: Missing part of the urxvt patch.
Solution: Add the change in term.c
Diffstat (limited to 'src')
-rw-r--r-- | src/term.c | 71 | ||||
-rw-r--r-- | src/version.c | 2 |
2 files changed, 71 insertions, 2 deletions
diff --git a/src/term.c b/src/term.c index 7798480ea..3fab538f8 100644 --- 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 <ESC>[#;#;#M, but we are matching <ESC>[ */ + || key_name[0] == KS_URXVT_MOUSE) { /* Check for xterm version string: "<Esc>[>{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 index aed1266fb..a72be66ee 100644 --- 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, |