diff options
author | Tatsuya Kinoshita <tats@debian.org> | 2013-04-08 12:36:33 +0000 |
---|---|---|
committer | Tatsuya Kinoshita <tats@debian.org> | 2013-04-08 12:36:33 +0000 |
commit | a342af3d63b304dd630f3cbde242f7266739bbaa (patch) | |
tree | 104e3a5b451875124f2d1584cb592a5d471aaacd /main.c | |
parent | Merge from upstream on 2012-05-22 (diff) | |
download | w3m-a342af3d63b304dd630f3cbde242f7266739bbaa.tar.gz w3m-a342af3d63b304dd630f3cbde242f7266739bbaa.zip |
Support SGR 1006 mouse reporting
Patch to support SGR 1006 mouse reporting, from [w3m-dev 04466]
on 2012-07-15, provided by Hayaki Saito.
Diffstat (limited to 'main.c')
-rw-r--r-- | main.c | 52 |
1 files changed, 52 insertions, 0 deletions
@@ -5398,6 +5398,58 @@ DEFUN(mouse, MOUSE, "mouse operation") process_mouse(btn, x, y); } +DEFUN(sgrmouse, SGRMOUSE, "SGR 1006 mouse operation") +{ + int btn = 0, x = 0, y = 0; + unsigned char c; + + do { + c = getch(); + if (IS_DIGIT(c)) + btn = btn * 10 + c - '0'; + else if (c == ';') + break; + else + return; + } while (1); + +#if defined(__CYGWIN__) && CYGWIN_VERSION_DLL_MAJOR < 1005 + if (cygwin_mouse_btn_swapped) { + if (btn == MOUSE_BTN2_DOWN) + btn = MOUSE_BTN3_DOWN; + else if (btn == MOUSE_BTN3_DOWN) + btn = MOUSE_BTN2_DOWN; + }; +#endif + + do { + c = getch(); + if (IS_DIGIT(c)) + x = x * 10 + c - '0'; + else if (c == ';') + break; + else + return; + } while (1); + + do { + c = getch(); + if (IS_DIGIT(c)) + y = y * 10 + c - '0'; + else if (c == 'M') + break; + else if (c == 'm') { + btn |= 3; + break; + } else + return; + } while (1); + + if (x < 0 || x >= COLS || y < 0 || y > LASTLINE) + return; + process_mouse(btn, x, y); +} + #ifdef USE_GPM int gpm_process_mouse(Gpm_Event * event, void *data) |