summaryrefslogtreecommitdiffstats
path: root/regress/tty-keys.sh
blob: 1fcc3657698409a48762f9768616a91fadeb33ae (plain)
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
#!/bin/sh

PATH=/bin:/usr/bin
TERM=screen

[ -z "$TEST_TMUX" ] && TEST_TMUX=$(readlink -f ../tmux)
TMUX="$TEST_TMUX -Ltest"
$TMUX kill-server 2>/dev/null
TMUX2="$TEST_TMUX -Ltest2"
$TMUX2 kill-server 2>/dev/null

TMP=$(mktemp)
trap "rm -f $TMP" 0 1 15

$TMUX2 -f/dev/null new -d || exit 1
$TMUX -f/dev/null new -d "$TMUX2 attach" || exit 1
sleep 0.1

exit_status=0

format_string () {
	case $1 in
		*\')
			printf '"%%%%"'
			;;
		*)
			printf "'%%%%'"
			;;
	esac
}

assert_key () {
	keys=$1
	expected_name=$2
	format_string=$(format_string "$expected_name")

	$TMUX2 command-prompt -k 'display-message -pl '"$format_string" > "$TMP" &
	sleep 0.05

	$TMUX send-keys $keys

	wait

	keys=$(printf '%s' "$keys" | sed -e 's/Escape/\\\\033/g' | tr -d '[:space:]')
	actual_name=$(tr -d '[:space:]' < "$TMP")

	if [ "$actual_name" = "$expected_name" ]; then
		if [ -n "$VERBOSE" ]; then
			echo "[PASS] $keys -> $actual_name"
		fi
	else
		echo "[FAIL] $keys -> $expected_name (Got: '$actual_name')"
		exit_status=1
	fi

	if [ "$3" = "--" ]; then
		shift; shift; shift
		assert_key "$@"
	fi

}

assert_key 0x00 'C-Space' # -- 'Escape 0x00' 'M-C-Space'
assert_key 0x01 'C-a'	  -- 'Escape 0x01' 'M-C-a'
assert_key 0x02 'C-b'	  -- 'Escape 0x02' 'M-C-b'
assert_key 0x03 'C-c'	  -- 'Escape 0x03' 'M-C-c'
assert_key 0x04 'C-d'	  -- 'Escape 0x04' 'M-C-d'
assert_key 0x05 'C-e'	  -- 'Escape 0x05' 'M-C-e'
assert_key 0x06 'C-f'	  -- 'Escape 0x06' 'M-C-f'
assert_key 0x07 'C-g'	  -- 'Escape 0x07' 'M-C-g'
assert_key 0x08 'C-h'	  -- 'Escape 0x08' 'M-C-h'
assert_key 0x09 'Tab'	  -- 'Escape 0x09' 'M-Tab'
assert_key 0x0A 'C-j'	  -- 'Escape 0x0A' 'M-C-j'
assert_key 0x0B 'C-k'	  -- 'Escape 0x0B' 'M-C-k'
assert_key 0x0C 'C-l'	  -- 'Escape 0x0C' 'M-C-l'
assert_key 0x0D 'Enter'	  -- 'Escape 0x0D' 'M-Enter'
assert_key 0x0E 'C-n'	  -- 'Escape 0x0E' 'M-C-n'
assert_key 0x0F 'C-o'	  -- 'Escape 0x0F' 'M-C-o'
assert_key 0x10 'C-p'	  -- 'Escape 0x10' 'M-C-p'
assert_key 0x11 'C-q'	  -- 'Escape 0x11' 'M-C-q'
assert_key 0x12 'C-r'	  -- 'Escape 0x12' 'M-C-r'
assert_key 0x13 'C-s'	  -- 'Escape 0x13' 'M-C-s'
assert_key 0x14 'C-t'	  -- 'Escape 0x14' 'M-C-t'
assert_key 0x15 'C-u'	  -- 'Escape 0x15' 'M-C-u'
assert_key 0x16 'C-v'	  -- 'Escape 0x16' 'M-C-v'
assert_key 0x17 'C-w'	  -- 'Escape 0x17' 'M-C-w'
assert_key 0x18 'C-x'	  -- 'Escape 0x18' 'M-C-x'
assert_key 0x19 'C-y'	  -- 'Escape 0x19' 'M-C-y'
assert_key 0x1A 'C-z'	  -- 'Escape 0x1A' 'M-C-z'
assert_key 0x1B 'Escape'  -- 'Escape 0x1B' 'M-Escape'
assert_key 0x1C "C-\\"	  -- 'Escape 0x1C' "M-C-\\"
assert_key 0x1D 'C-]'	  -- 'Escape 0x1D' 'M-C-]'
assert_key 0x1E 'C-^'	  -- 'Escape 0x1E' 'M-C-^'
assert_key 0x1F 'C-_'	  -- 'Escape 0x1F' 'M-C-_'
assert_key 0x20 'Space'	  -- 'Escape 0x20' 'M-Space'
assert_key 0x21 '!'	  -- 'Escape 0x21' 'M-!'
assert_key 0x22 '"'	  -- 'Escape 0x22' 'M-"'
assert_key 0x23 '#'	  -- 'Escape 0x23'= 'M-#'
assert_key 0x24 '$'	  -- 'Escape 0x24'= 'M-$'
assert_key 0x25 '%'	  -- 'Escape 0x25'= 'M-%'
assert_key 0x26 '&'	  -- 'Escape 0x26'= 'M-&'
assert_key 0x27 "'"	  -- 'Escape 0x27' "M-'"
assert_key 0x28 '('	  -- 'Escape 0x28' 'M-('
assert_key 0x29 ')'	  -- 'Escape 0x29' 'M-)'
assert_key 0x2A '*'	  -- 'Escape 0x2A' 'M-*'
assert_key 0x2B '+'	  -- 'Escape 0x2B' 'M-+'
assert_key 0x2C ','	  -- 'Escape 0x2C' 'M-,'
assert_key 0x2D '-'	  -- 'Escape 0x2D' 'M--'
assert_key 0x2E '.'	  -- 'Escape 0x2E' 'M-.'
assert_key 0x2F '/'	  -- 'Escape 0x2F' 'M-/'
assert_key 0x30 '0'	  -- 'Escape 0x30' 'M-0'
assert_key 0x31 '1'	  -- 'Escape 0x31' 'M-1'
assert_key 0x32 '2'	  -- 'Escape 0x32' 'M-2'
assert_key 0x33 '3'	  -- 'Escape 0x33' 'M-3'
assert_key 0x34 '4'	  -- 'Escape 0x34' 'M-4'
assert_key 0x35 '5'	  -- 'Escape 0x35' 'M-5'
assert_key 0x36 '6'	  -- 'Escape 0x36' 'M-6'
assert_key 0x37 '7'	  -- 'Escape 0x37' 'M-7'
assert_key 0x38 '8'	  -- 'Escape 0x38' 'M-8'
assert_key 0x39 '9'	  -- 'Escape 0x39' 'M-9'
assert_key 0x3A ':'	  -- 'Escape 0x3A' 'M-:'
assert_key 0x3B ';'	  -- 'Escape 0x3B' 'M-;'
assert_key 0x3C '<'	  -- 'Escape 0x3C' 'M-<'
assert_key 0x3D '='	  -- 'Escape 0x3D' 'M-='
assert_key 0x3E '>'	  -- 'Escape 0x3E' 'M->'
assert_key 0x3F '?'	  -- 'Escape 0x3F' 'M-?'
assert_key 0x40 '@'	  -- 'Escape 0x40' 'M-@'
assert_key 0x41 'A'	  -- 'Escape 0x41' 'M-A'
assert_key 0x42 'B'	  -- 'Escape 0x42' 'M-B'
assert_key 0x43 'C'	  -- 'Escape 0x43' 'M-C'
assert_key 0x44 'D'	  -- 'Escape 0x44' 'M-D'
assert_key 0x45 'E'	  -- 'Escape 0x45' 'M-E'
assert_key 0x46 'F'	  -- 'Escape 0x46' 'M-F'
assert_key 0x47 'G'	  -- 'Escape 0x47' 'M-G'
assert_key 0x48 'H'	  -- 'Escape 0x48' 'M-H'
assert_key 0x49 'I'	  -- 'Escape 0x49' 'M-I'
assert_key 0x4A 'J'	  -- 'Escape 0x4A' 'M-J'
assert_key 0x4B 'K'	  -- 'Escape 0x4B' 'M-K'
assert_key 0x4C 'L'	  -- 'Escape 0x4C' 'M-L'
assert_key 0x4D 'M'	  -- 'Escape 0x4D' 'M-M'
assert_key 0x4E 'N'	  -- 'Escape 0x4E' 'M-N'
assert_key 0x4F 'O'	  -- 'Escape 0x4F' 'M-O'
assert_key 0x50 'P'	  -- 'Escape 0x50' 'M-P'
assert_key 0x51 'Q'	  -- 'Escape 0x51' 'M-Q'
assert_key 0x52 'R'	  -- 'Escape 0x52' 'M-R'
assert_key 0x53 'S'	  -- 'Escape 0x53' 'M-S'
assert_key 0x54 'T'	  -- 'Escape 0x54' 'M-T'
assert_key 0x55 'U'	  -- 'Escape 0x55' 'M-U'
assert_key 0x56 'V'	  -- 'Escape 0x56' 'M-V'
assert_key 0x57 'W'	  -- 'Escape 0x57' 'M-W'
assert_key 0x58 'X'	  -- 'Escape 0x58' 'M-X'
assert_key 0x59 'Y'	  -- 'Escape 0x59' 'M-Y'
assert_key 0x5A 'Z'	  -- 'Escape 0x5A' 'M-Z'
assert_key 0x5B '['	  -- 'Escape 0x5B' 'M-['
assert_key 0x5C "\\"	  -- 'Escape 0x5C' "M-\\"
assert_key 0x5D ']'	  -- 'Escape 0x5D' 'M-]'
assert_key 0x5E '^'	  -- 'Escape 0x5E' 'M-^'
assert_key 0x5F '_'	  -- 'Escape 0x5F' 'M-_'
assert_key 0x60 '`'	  -- 'Escape 0x60' 'M-`'
assert_key 0x61 'a'	  -- 'Escape 0x61' 'M-a'
assert_key 0x62 'b'	  -- 'Escape 0x62' 'M-b'
assert_key 0x63 'c'	  -- 'Escape 0x63' 'M-c'
assert_key 0x64 'd'	  -- 'Escape 0x64' 'M-d'
assert_key 0x65 'e'	  -- 'Escape 0x65' 'M-e'
assert_key 0x66 'f'	  -- 'Escape 0x66' 'M-f'
assert_key 0x67 'g'	  -- 'Escape 0x67' 'M-g'
assert_key 0x68 'h'	  -- 'Escape 0x68' 'M-h'
assert_key 0x69 'i'	  -- 'Escape 0x69' 'M-i'
assert_key 0x6A 'j'	  -- 'Escape 0x6A' 'M-j'
assert_key 0x6B 'k'	  -- 'Escape 0x6B' 'M-k'
assert_key 0x6C 'l'	  -- 'Escape 0x6C' 'M-l'
assert_key 0x6D 'm'	  -- 'Escape 0x6D' 'M-m'
assert_key 0x6E 'n'	  -- 'Escape 0x6E' 'M-n'
assert_key 0x6F 'o'	  -- 'Escape 0x6F' 'M-o'
assert_key 0x70 'p'	  -- 'Escape 0x70' 'M-p'
assert_key 0x71 'q'	  -- 'Escape 0x71' 'M-q'
assert_key 0x72 'r'	  -- 'Escape 0x72' 'M-r'
assert_key 0x73 's'	  -- 'Escape 0x73' 'M-s'
assert_key 0x74 't'	  -- 'Escape 0x74' 'M-t'
assert_key 0x75 'u'	  -- 'Escape 0x75' 'M-u'
assert_key 0x76 'v'	  -- 'Escape 0x76' 'M-v'
assert_key 0x77 'w'	  -- 'Escape 0x77' 'M-w'
assert_key 0x78 'x'	  -- 'Escape 0x78' 'M-x'
assert_key 0x79 'y'	  -- 'Escape 0x79' 'M-y'
assert_key 0x7A 'z'	  -- 'Escape 0x7A' 'M-z'
assert_key 0x7B '{'	  -- 'Escape 0x7B' 'M-{'
assert_key 0x7C '|'	  -- 'Escape 0x7C' 'M-|'
assert_key 0x7D '}'	  -- 'Escape 0x7D' 'M-}'
assert_key 0x7E '~'	  -- 'Escape 0x7E' 'M-~'
assert_key 0x7F 'BSpace'  -- 'Escape 0x7F' 'M-BSpace'

# Numeric keypad
assert_key 'Escape OM' 'KPEnter' -- 'Escape Escape OM' 'M-KPEnter'
assert_key 'Escape Oj' 'KP*'	 -- 'Escape Escape Oj' 'M-KP*'
assert_key 'Escape Ok' 'KP+'	 -- 'Escape Escape Ok' 'M-KP+'
assert_key 'Escape Om' 'KP-'	 -- 'Escape Escape Om' 'M-KP-'
assert_key 'Escape On' 'KP.'	 -- 'Escape Escape On' 'M-KP.'
assert_key 'Escape Oo' 'KP/'	 -- 'Escape Escape Oo' 'M-KP/'
assert_key 'Escape Op' 'KP0'	 -- 'Escape Escape Op' 'M-KP0'
assert_key 'Escape Oq' 'KP1'	 -- 'Escape Escape Oq' 'M-KP1'
assert_key 'Escape Or' 'KP2'	 -- 'Escape Escape Or' 'M-KP2'
assert_key 'Escape Os' 'KP3'	 -- 'Escape Escape Os' 'M-KP3'
assert_key 'Escape Ot' 'KP4'	 -- 'Escape Escape Ot' 'M-KP4'
assert_key 'Escape Ou' 'KP5'	 -- 'Escape Escape Ou' 'M-KP5'
assert_key 'Escape Ov' 'KP6'	 -- 'Escape Escape Ov' 'M-KP6'
assert_key 'Escape Ow' 'KP7'	 -- 'Escape Escape Ow' 'M-KP7'
assert_key 'Escape Ox'