1
0
forked from aniani/vim

updated for version 7.3.353

Problem:    Missing part of the urxvt patch.
Solution:   Add the change in term.c
This commit is contained in:
Bram Moolenaar
2011-10-26 23:48:20 +02:00
parent db710ed999
commit 1dff76bcb8
2 changed files with 71 additions and 2 deletions

View File

@@ -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 */
@@ -4140,6 +4142,9 @@ check_termcode(max_offset, buf, buflen)
# endif
# ifdef FEAT_MOUSE_PTERM
|| key_name[0] == (int)KS_PTERM_MOUSE
# endif
# ifdef FEAT_MOUSE_URXVT
|| key_name[0] == (int)KS_URXVT_MOUSE
# endif
)
{
@@ -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.