+2012-04-25 Thomas Wolff <towo@towo.net>
+
+ * fhandler.h (class dev_console): Add member ext_mouse_mode5.
+ * fhandler_console.cc (fhandler_console::read): Implement extended
+ mouse mode 1005 (xterm, mintty).
+ Fix actual mouse reporting for large coordinates.
+
2012-04-24 Corinna Vinschen <corinna@vinschen.de>
* include/cygwin/version.h (CYGWIN_VERSION_DLL_MINOR): Bump to 15.
return 0;
}
- /* Check whether adjusted mouse position can be reported */
- if (dev_state.dwMousePosition.X > 0xFF - ' ' - 1
- || dev_state.dwMousePosition.Y > 0xFF - ' ' - 1)
- {
- /* Mouse position out of reporting range */
- return 0;
- }
-
return ((mouse_event.dwEventFlags == 0 || mouse_event.dwEventFlags == DOUBLE_CLICK)
&& mouse_event.dwButtonState != dev_state.dwLastButtonState)
|| mouse_event.dwEventFlags == MOUSE_WHEELED
dev_state.dwMousePosition.Y + 1);
nread = strlen (tmp);
}
- /* else if (dev_state.ext_mouse_mode5) not implemented */
+ else if (dev_state.ext_mouse_mode5)
+ {
+ unsigned int xcode = dev_state.dwMousePosition.X + ' ' + 1;
+ unsigned int ycode = dev_state.dwMousePosition.Y + ' ' + 1;
+
+ __small_sprintf (tmp, "\033[M%c", b + ' ');
+ nread = 4;
+ /* the neat nested encoding function of mintty
+ does not compile in g++, so let's unfold it: */
+ if (xcode < 0x80)
+ tmp [nread++] = xcode;
+ else if (xcode < 0x800)
+ {
+ tmp [nread++] = 0xC0 + (xcode >> 6);
+ tmp [nread++] = 0x80 + (xcode & 0x3F);
+ }
+ else
+ tmp [nread++] = 0;
+ if (ycode < 0x80)
+ tmp [nread++] = ycode;
+ else if (ycode < 0x800)
+ {
+ tmp [nread++] = 0xC0 + (ycode >> 6);
+ tmp [nread++] = 0x80 + (ycode & 0x3F);
+ }
+ else
+ tmp [nread++] = 0;
+ }
else
{
unsigned int xcode = dev_state.dwMousePosition.X + ' ' + 1;
break;
case 1005: /* Extended mouse mode */
- syscall_printf ("ignored h/l command for extended mouse mode");
+ dev_state.ext_mouse_mode5 = c == 'h';
break;
case 1006: /* SGR extended mouse mode */