diff options
Diffstat (limited to '')
-rw-r--r-- | debian/patches/120_sgrmouse.patch | 111 | ||||
-rw-r--r-- | debian/patches/series | 1 |
2 files changed, 112 insertions, 0 deletions
diff --git a/debian/patches/120_sgrmouse.patch b/debian/patches/120_sgrmouse.patch new file mode 100644 index 0000000..0cc9feb --- /dev/null +++ b/debian/patches/120_sgrmouse.patch @@ -0,0 +1,111 @@ +Subject: Support SGR 1006 +From: Hayaki Saito <user@zuse.jp> +Date: Sun, 15 Jul 2012 20:14:16 +0900 +Origin: upstream, http://www.sic.med.tohoku.ac.jp/~satodai/w3m-dev/201207.month/4466.html + +Patch to support SGR 1006 mouse reporting, from [w3m-dev 04466] +on 2012-07-15, provided by Hayaki Saito. + +diff --git a/keybind.c b/keybind.c +index a490962..fec0c65 100644 +--- a/keybind.c ++++ b/keybind.c +@@ -91,7 +91,7 @@ unsigned char EscBKeymap[128] = { + /* 0 1 2 3 4 5 6 7 */ + nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, + /* 8 9 : ; < = > ? */ +- nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, nulcmd, ++ nulcmd, nulcmd, nulcmd, nulcmd, sgrmouse, nulcmd, nulcmd, nulcmd, + /* @ A B C D E F G */ + nulcmd, movU, movD, movR, movL, nulcmd, goLineL, pgFore, + /* H I J K L M N O */ +diff --git a/main.c b/main.c +index b421943..35f2f39 100644 +--- a/main.c ++++ b/main.c +@@ -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) +diff --git a/proto.h b/proto.h +index f8a7345..980d522 100644 +--- a/proto.h ++++ b/proto.h +@@ -683,6 +683,7 @@ extern void reMark(void); + + #ifdef USE_MOUSE + extern void mouse(void); ++extern void sgrmouse(void); + extern void mouse_init(void); + extern void mouse_end(void); + extern void mouse_active(void); +diff --git a/terms.c b/terms.c +index 7a3c987..8d928a2 100644 +--- a/terms.c ++++ b/terms.c +@@ -2027,8 +2027,8 @@ sleep_till_anykey(int sec, int purge) + + #ifdef USE_MOUSE + +-#define XTERM_ON {fputs("\033[?1001s\033[?1000h",ttyf); flush_tty();} +-#define XTERM_OFF {fputs("\033[?1000l\033[?1001r",ttyf); flush_tty();} ++#define XTERM_ON {fputs("\033[?1001s\033[?1000h\033[?1006h",ttyf); flush_tty();} ++#define XTERM_OFF {fputs("\033[?1006l\033[?1000l\033[?1001r",ttyf); flush_tty();} + #define CYGWIN_ON {fputs("\033[?1000h",ttyf); flush_tty();} + #define CYGWIN_OFF {fputs("\033[?1000l",ttyf); flush_tty();} + diff --git a/debian/patches/series b/debian/patches/series index a2b3b65..5c08fb1 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -8,3 +8,4 @@ 090_parallel-make.patch 100_use-cppflags.patch 110_form-input-text.patch +120_sgrmouse.patch |