summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2011-10-26 23:48:20 +0200
committerBram Moolenaar <Bram@vim.org>2011-10-26 23:48:20 +0200
commit1dff76bcb88e657556177e653f931129799a863e (patch)
treef69141e835e0a5894fcc7b2289344dda5c8f8ec0 /src
parentdb710ed999edf318477ae12d95f66519f2b21bbf (diff)
downloadvim-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.c71
-rw-r--r--src/version.c2
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,