1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
#include "../termkey.h"
#include "taplib.h"
int main(int argc, char *argv[])
{
TermKey *tk;
TermKeyKey key;
TermKeyMouseEvent ev;
int button, line, col;
char buffer[32];
size_t len;
plan_tests(60);
/* vt100 doesn't have a mouse, we need xterm */
tk = termkey_new_abstract("xterm", 0);
termkey_push_bytes(tk, "\e[M !!", 6);
is_int(termkey_getkey(tk, &key), TERMKEY_RES_KEY, "getkey yields RES_KEY for mouse press");
is_int(key.type, TERMKEY_TYPE_MOUSE, "key.type for mouse press");
is_int(termkey_interpret_mouse(tk, &key, &ev, &button, &line, &col), TERMKEY_RES_KEY, "interpret_mouse yields RES_KEY");
is_int(ev, TERMKEY_MOUSE_PRESS, "mouse event for press");
is_int(button, 1, "mouse button for press");
is_int(line, 1, "mouse line for press");
is_int(col, 1, "mouse column for press");
is_int(key.modifiers, 0, "modifiers for press");
len = termkey_strfkey(tk, buffer, sizeof buffer, &key, 0);
is_int(len, 13, "string length for press");
is_str(buffer, "MousePress(1)", "string buffer for press");
len = termkey_strfkey(tk, buffer, sizeof buffer, &key, TERMKEY_FORMAT_MOUSE_POS);
is_int(len, 21, "string length for press");
is_str(buffer, "MousePress(1) @ (1,1)", "string buffer for press");
termkey_push_bytes(tk, "\e[M@\"!", 6);
termkey_getkey(tk, &key);
is_int(termkey_interpret_mouse(tk, &key, &ev, &button, &line, &col), TERMKEY_RES_KEY, "interpret_mouse yields RES_KEY");
is_int(ev, TERMKEY_MOUSE_DRAG, "mouse event for drag");
is_int(button, 1, "mouse button for drag");
is_int(line, 1, "mouse line for drag");
is_int(col, 2, "mouse column for drag");
is_int(key.modifiers, 0, "modifiers for press");
termkey_push_bytes(tk, "\e[M##!", 6);
termkey_getkey(tk, &key);
is_int(termkey_interpret_mouse(tk, &key, &ev, &button, &line, &col), TERMKEY_RES_KEY, "interpret_mouse yields RES_KEY");
is_int(ev, TERMKEY_MOUSE_RELEASE, "mouse event for release");
is_int(line, 1, "mouse line for release");
is_int(col, 3, "mouse column for release");
is_int(key.modifiers, 0, "modifiers for press");
termkey_push_bytes(tk, "\e[M0++", 6);
termkey_getkey(tk, &key);
is_int(termkey_interpret_mouse(tk, &key, &ev, &button, &line, &col), TERMKEY_RES_KEY, "interpret_mouse yields RES_KEY");
is_int(ev, TERMKEY_MOUSE_PRESS, "mouse event for Ctrl-press");
is_int(button, 1, "mouse button for Ctrl-press");
is_int(line, 11, "mouse line for Ctrl-press");
is_int(col, 11, "mouse column for Ctrl-press");
is_int(key.modifiers, TERMKEY_KEYMOD_CTRL, "modifiers for Ctrl-press");
len = termkey_strfkey(tk, buffer, sizeof buffer, &key, 0);
is_int(len, 15, "string length for Ctrl-press");
is_str(buffer, "C-MousePress(1)", "string buffer for Ctrl-press");
// rxvt protocol
termkey_push_bytes(tk, "\e[0;20;20M", 10);
is_int(termkey_getkey(tk, &key), TERMKEY_RES_KEY, "getkey yields RES_KEY for mouse press rxvt protocol");
is_int(key.type, TERMKEY_TYPE_MOUSE, "key.type for mouse press rxvt protocol");
is_int(termkey_interpret_mouse(tk, &key, &ev, &button, &line, &col), TERMKEY_RES_KEY, "interpret_mouse yields RES_KEY");
is_int(ev, TERMKEY_MOUSE_PRESS, "mouse event for press rxvt protocol");
is_int(button, 1, "mouse button for press rxvt protocol");
is_int(line, 20, "mouse line for press rxvt protocol");
is_int(col, 20, "mouse column for press rxvt protocol");
is_int(key.modifiers, 0, "modifiers for press rxvt protocol");
termkey_push_bytes(tk, "\e[3;20;20M", 10);
is_int(termkey_getkey(tk, &key), TERMKEY_RES_KEY, "getkey yields RES_KEY for mouse release rxvt protocol");
is_int(key.type, TERMKEY_TYPE_MOUSE, "key.type for mouse release rxvt protocol");
is_int(termkey_interpret_mouse(tk, &key, &ev, &button, &line, &col), TERMKEY_RES_KEY, "interpret_mouse yields RES_KEY");
is_int(ev, TERMKEY_MOUSE_RELEASE, "mouse event for release rxvt protocol");
is_int(line, 20, "mouse line for release rxvt protocol");
is_int(col, 20, "mouse column for release rxvt protocol");
is_int(key.modifiers, 0, "modifiers for release rxvt protocol");
// SGR protocol
termkey_push_bytes(tk, "\e[<0;30;30M", 11);
is_int(termkey_getkey(tk, &key), TERMKEY_RES_KEY, "getkey yields RES_KEY for mouse press SGR encoding");
is_int(key.type, TERMKEY_TYPE_MOUSE, "key.type for mouse press SGR encoding");
is_int(termkey_interpret_mouse(tk, &key, &ev, &button, &line, &col), TERMKEY_RES_KEY, "interpret_mouse yields RES_KEY");
is_int(ev, TERMKEY_MOUSE_PRESS, "mouse event for press SGR");
is_int(button, 1, "mouse button for press SGR");
is_int(line, 30, "mouse line for press SGR");
is_int(col, 30, "mouse column for press SGR");
is_int(key.modifiers, 0, "modifiers for press SGR");
termkey_push_bytes(tk, "\e[<0;30;30m", 11);
is_int(termkey_getkey(tk, &key), TERMKEY_RES_KEY, "getkey yields RES_KEY for mouse release SGR encoding");
is_int(key.type, TERMKEY_TYPE_MOUSE, "key.type for mouse release SGR encoding");
is_int(termkey_interpret_mouse(tk, &key, &ev, &button, &line, &col), TERMKEY_RES_KEY, "interpret_mouse yields RES_KEY");
is_int(ev, TERMKEY_MOUSE_RELEASE, "mouse event for release SGR");
termkey_push_bytes(tk, "\e[<0;500;300M", 13);
termkey_getkey(tk, &key);
termkey_interpret_mouse(tk, &key, &ev, &button, &line, &col);
is_int(line, 300, "mouse line for press SGR wide");
is_int(col, 500, "mouse column for press SGR wide");
termkey_destroy(tk);
return exit_status();
}
|