6 [ -z "$TEST_TMUX" ] && TEST_TMUX
=$
(readlink
-f ..
/tmux
)
7 TMUX
="$TEST_TMUX -Ltest"
8 $TMUX kill-server
2>/dev
/null
10 $TMUX -f/dev
/null new
-x20 -y2 -d ||
exit 1
12 $TMUX set -g escape-time
0
20 W
=$
($TMUX new-window
-P -- sh
-c 'stty raw -echo && cat -tv')
21 $TMUX send-keys
-t$W "$key" 'EOL' ||
exit 1
24 actual_code
=$
($TMUX capturep
-pt$W | \
27 $TMUX kill-window
-t$W ||
exit 1
29 if [ "$actual_code" = "$expected_code" ]; then
30 if [ -n "$VERBOSE" ]; then
31 echo "[PASS] $key -> $actual_code"
34 echo "[FAIL] $key -> $expected_code (Got: $actual_code)"
41 if [ "$1" = "--" ]; then
47 assert_key
'C-Space' '^@'
48 assert_key
'C-a' '^A' -- 'M-C-a' '^[^A'
49 assert_key
'C-b' '^B' -- 'M-C-b' '^[^B'
50 assert_key
'C-c' '^C' -- 'M-C-c' '^[^C'
51 assert_key
'C-d' '^D' -- 'M-C-d' '^[^D'
52 assert_key
'C-e' '^E' -- 'M-C-e' '^[^E'
53 assert_key
'C-f' '^F' -- 'M-C-f' '^[^F'
54 assert_key
'C-g' '^G' -- 'M-C-g' '^[^G'
55 assert_key
'C-h' '^H' -- 'M-C-h' '^[^H'
56 assert_key
'C-i' '^I' -- 'M-C-i' '^[^I'
57 assert_key
'C-j' '' -- 'M-C-j' '^[' # NL
58 assert_key
'C-k' '^K' -- 'M-C-k' '^[^K'
59 assert_key
'C-l' '^L' -- 'M-C-l' '^[^L'
60 assert_key
'C-m' '^M' -- 'M-C-m' '^[^M'
61 assert_key
'C-n' '^N' -- 'M-C-n' '^[^N'
62 assert_key
'C-o' '^O' -- 'M-C-o' '^[^O'
63 assert_key
'C-p' '^P' -- 'M-C-p' '^[^P'
64 assert_key
'C-q' '^Q' -- 'M-C-q' '^[^Q'
65 assert_key
'C-r' '^R' -- 'M-C-r' '^[^R'
66 assert_key
'C-s' '^S' -- 'M-C-s' '^[^S'
67 assert_key
'C-t' '^T' -- 'M-C-t' '^[^T'
68 assert_key
'C-u' '^U' -- 'M-C-u' '^[^U'
69 assert_key
'C-v' '^V' -- 'M-C-v' '^[^V'
70 assert_key
'C-w' '^W' -- 'M-C-w' '^[^W'
71 assert_key
'C-x' '^X' -- 'M-C-x' '^[^X'
72 assert_key
'C-y' '^Y' -- 'M-C-y' '^[^Y'
73 assert_key
'C-z' '^Z' -- 'M-C-z' '^[^Z'
74 assert_key
'Escape' '^[' -- 'M-Escape' '^[^['
75 assert_key
"C-\\" "^\\" -- "M-C-\\" "^[^\\"
76 assert_key
'C-]' '^]' -- 'M-C-]' '^[^]'
77 assert_key
'C-^' '^^' -- 'M-C-^' '^[^^'
78 assert_key
'C-_' '^_' -- 'M-C-_' '^[^_'
79 assert_key
'Space' ' ' -- 'M-Space' '^[ '
80 assert_key
'!' '!' -- 'M-!' '^[!'
81 assert_key
'"' '"' -- 'M-"' '^["'
82 assert_key
'#' '#' -- 'M-#' '^[#'
83 assert_key
'$' '$' -- 'M-$' '^[$'
84 assert_key
'%' '%' -- 'M-%' '^[%'
85 assert_key
'&' '&' -- 'M-&' '^[&'
86 assert_key
"'" "'" -- "M-'" "^['"
87 assert_key
'(' '(' -- 'M-(' '^[('
88 assert_key
')' ')' -- 'M-)' '^[)'
89 assert_key
'*' '*' -- 'M-*' '^[*'
90 assert_key
'+' '+' -- 'M-+' '^[+'
91 assert_key
',' ',' -- 'M-,' '^[,'
92 assert_key
'-' '-' -- 'M--' '^[-'
93 assert_key
'.' '.' -- 'M-.' '^[.'
94 assert_key
'/' '/' -- 'M-/' '^[/'
95 assert_key
'0' '0' -- 'M-0' '^[0'
96 assert_key
'1' '1' -- 'M-1' '^[1'
97 assert_key
'2' '2' -- 'M-2' '^[2'
98 assert_key
'3' '3' -- 'M-3' '^[3'
99 assert_key
'4' '4' -- 'M-4' '^[4'
100 assert_key
'5' '5' -- 'M-5' '^[5'
101 assert_key
'6' '6' -- 'M-6' '^[6'
102 assert_key
'7' '7' -- 'M-7' '^[7'
103 assert_key
'8' '8' -- 'M-8' '^[8'
104 assert_key
'9' '9' -- 'M-9' '^[9'
105 assert_key
':' ':' -- 'M-:' '^[:'
106 assert_key
'\;' ';' -- 'M-\;' '^[;'
107 assert_key
'<' '<' -- 'M-<' '^[<'
108 assert_key
'=' '=' -- 'M-=' '^[='
109 assert_key
'>' '>' -- 'M->' '^[>'
110 assert_key
'?' '?' -- 'M-?' '^[?'
111 assert_key
'@' '@' -- 'M-@' '^[@'
112 assert_key
'A' 'A' -- 'M-A' '^[A'
113 assert_key
'B' 'B' -- 'M-B' '^[B'
114 assert_key
'C' 'C' -- 'M-C' '^[C'
115 assert_key
'D' 'D' -- 'M-D' '^[D'
116 assert_key
'E' 'E' -- 'M-E' '^[E'
117 assert_key
'F' 'F' -- 'M-F' '^[F'
118 assert_key
'G' 'G' -- 'M-G' '^[G'
119 assert_key
'H' 'H' -- 'M-H' '^[H'
120 assert_key
'I' 'I' -- 'M-I' '^[I'
121 assert_key
'J' 'J' -- 'M-J' '^[J'
122 assert_key
'K' 'K' -- 'M-K' '^[K'
123 assert_key
'L' 'L' -- 'M-L' '^[L'
124 assert_key
'M' 'M' -- 'M-M' '^[M'
125 assert_key
'N' 'N' -- 'M-N' '^[N'
126 assert_key
'O' 'O' -- 'M-O' '^[O'
127 assert_key
'P' 'P' -- 'M-P' '^[P'
128 assert_key
'Q' 'Q' -- 'M-Q' '^[Q'
129 assert_key
'R' 'R' -- 'M-R' '^[R'
130 assert_key
'S' 'S' -- 'M-S' '^[S'
131 assert_key
'T' 'T' -- 'M-T' '^[T'
132 assert_key
'U' 'U' -- 'M-U' '^[U'
133 assert_key
'V' 'V' -- 'M-V' '^[V'
134 assert_key
'W' 'W' -- 'M-W' '^[W'
135 assert_key
'X' 'X' -- 'M-X' '^[X'
136 assert_key
'Y' 'Y' -- 'M-Y' '^[Y'
137 assert_key
'Z' 'Z' -- 'M-Z' '^[Z'
138 assert_key
'[' '[' -- 'M-[' '^[['
139 assert_key
"\\" "\\" -- "M-\\" "^[\\"
140 assert_key
']' ']' -- 'M-]' '^[]'
141 assert_key
'^' '^' -- 'M-^' '^[^'
142 assert_key
'_' '_' -- 'M-_' '^[_'
143 assert_key
'`' '`' -- 'M-`' '^[`'
144 assert_key
'a' 'a' -- 'M-a' '^[a'
145 assert_key
'b' 'b' -- 'M-b' '^[b'
146 assert_key
'c' 'c' -- 'M-c' '^[c'
147 assert_key
'd' 'd' -- 'M-d' '^[d'
148 assert_key
'e' 'e' -- 'M-e' '^[e'
149 assert_key
'f' 'f' -- 'M-f' '^[f'
150 assert_key
'g' 'g' -- 'M-g' '^[g'
151 assert_key
'h' 'h' -- 'M-h' '^[h'
152 assert_key
'i' 'i' -- 'M-i' '^[i'
153 assert_key
'j' 'j' -- 'M-j' '^[j'
154 assert_key
'k' 'k' -- 'M-k' '^[k'
155 assert_key
'l' 'l' -- 'M-l' '^[l'
156 assert_key
'm' 'm' -- 'M-m' '^[m'
157 assert_key
'n' 'n' -- 'M-n' '^[n'
158 assert_key
'o' 'o' -- 'M-o' '^[o'
159 assert_key
'p' 'p' -- 'M-p' '^[p'
160 assert_key
'q' 'q' -- 'M-q' '^[q'
161 assert_key
'r' 'r' -- 'M-r' '^[r'
162 assert_key
's' 's' -- 'M-s' '^[s'
163 assert_key
't' 't' -- 'M-t' '^[t'
164 assert_key
'u' 'u' -- 'M-u' '^[u'
165 assert_key
'v' 'v' -- 'M-v' '^[v'
166 assert_key
'w' 'w' -- 'M-w' '^[w'
167 assert_key
'x' 'x' -- 'M-x' '^[x'
168 assert_key
'y' 'y' -- 'M-y' '^[y'
169 assert_key
'z' 'z' -- 'M-z' '^[z'
170 assert_key
'{' '{' -- 'M-{' '^[{'
171 assert_key
'|' '|' -- 'M-|' '^[|'
172 assert_key
'}' '}' -- 'M-}' '^[}'
173 assert_key
'~' '~' -- 'M-~' '^[~'
175 assert_key
'Tab' '^I' -- 'M-Tab' '^[^I'
176 assert_key
'BSpace' '^?' -- 'M-BSpace' '^[^?'
178 ## These cannot be sent, is that intentional?
179 ## assert_key 'PasteStart' "^[[200~"
180 ## assert_key 'PasteEnd' "^[[201~"
182 assert_key
'F1' "^[OP"
183 assert_key
'F2' "^[OQ"
184 assert_key
'F3' "^[OR"
185 assert_key
'F4' "^[OS"
186 assert_key
'F5' "^[[15~"
187 assert_key
'F6' "^[[17~"
188 assert_key
'F8' "^[[19~"
189 assert_key
'F9' "^[[20~"
190 assert_key
'F10' "^[[21~"
191 assert_key
'F11' "^[[23~"
192 assert_key
'F12' "^[[24~"
194 assert_key
'IC' '^[[2~'
195 assert_key
'Insert' '^[[2~'
196 assert_key
'DC' '^[[3~'
197 assert_key
'Delete' '^[[3~'
199 ## Why do these differ from tty-keys?
200 assert_key
'Home' '^[[1~'
201 assert_key
'End' '^[[4~'
203 assert_key
'NPage' '^[[6~'
204 assert_key
'PageDown' '^[[6~'
205 assert_key
'PgDn' '^[[6~'
206 assert_key
'PPage' '^[[5~'
207 assert_key
'PageUp' '^[[5~'
208 assert_key
'PgUp' '^[[5~'
210 assert_key
'BTab' '^[[Z'
211 assert_key
'C-S-Tab' '^I'
213 assert_key
'Up' '^[[A'
214 assert_key
'Down' '^[[B'
215 assert_key
'Right' '^[[C'
216 assert_key
'Left' '^[[D'
218 # assert_key 'KPEnter'
219 assert_key
'KP*' '*' -- 'M-KP*' '^[*'
220 assert_key
'KP+' '+' -- 'M-KP+' '^[+'
221 assert_key
'KP-' '-' -- 'M-KP-' '^[-'
222 assert_key
'KP.' '.' -- 'M-KP.' '^[.'
223 assert_key
'KP/' '/' -- 'M-KP/' '^[/'
224 assert_key
'KP0' '0' -- 'M-KP0' '^[0'
225 assert_key
'KP1' '1' -- 'M-KP1' '^[1'
226 assert_key
'KP2' '2' -- 'M-KP2' '^[2'
227 assert_key
'KP3' '3' -- 'M-KP3' '^[3'
228 assert_key
'KP4' '4' -- 'M-KP4' '^[4'
229 assert_key
'KP5' '5' -- 'M-KP5' '^[5'
230 assert_key
'KP6' '6' -- 'M-KP6' '^[6'
231 assert_key
'KP7' '7' -- 'M-KP7' '^[7'
232 assert_key
'KP8' '8' -- 'M-KP8' '^[8'
233 assert_key
'KP9' '9' -- 'M-KP9' '^[9'
236 $TMUX set -g extended-keys always
238 assert_extended_key
() {
240 expected_code_pattern
=$2
242 expected_code
=$
(printf '%s' "$expected_code_pattern" |
sed -e 's/;_/;2/')
243 assert_key
"S-$extended_key" "$expected_code"
245 expected_code
=$
(printf '%s' "$expected_code_pattern" |
sed -e 's/;_/;3/')
246 assert_key
"M-$extended_key" "$expected_code"
248 expected_code
=$
(printf '%s' "$expected_code_pattern" |
sed -e 's/;_/;4/')
249 assert_key
"S-M-$extended_key" "$expected_code"
251 expected_code
=$
(printf '%s' "$expected_code_pattern" |
sed -e 's/;_/;5/')
252 assert_key
"C-$extended_key" "$expected_code"
254 expected_code
=$
(printf '%s' "$expected_code_pattern" |
sed -e 's/;_/;6/')
255 assert_key
"S-C-$extended_key" "$expected_code"
257 expected_code
=$
(printf '%s' "$expected_code_pattern" |
sed -e 's/;_/;7/')
258 assert_key
"C-M-$extended_key" "$expected_code"
260 expected_code
=$
(printf '%s' "$expected_code_pattern" |
sed -e 's/;_/;8/')
261 assert_key
"S-C-M-$extended_key" "$expected_code"
264 ## Many of these pass without extended keys enabled -- are they extended keys?
265 assert_extended_key
'F1' '^[[1;_P'
266 assert_extended_key
'F2' "^[[1;_Q"
267 assert_extended_key
'F3' "^[[1;_R"
268 assert_extended_key
'F4' "^[[1;_S"
269 assert_extended_key
'F5' "^[[15;_~"
270 assert_extended_key
'F6' "^[[17;_~"
271 assert_extended_key
'F8' "^[[19;_~"
272 assert_extended_key
'F9' "^[[20;_~"
273 assert_extended_key
'F10' "^[[21;_~"
274 assert_extended_key
'F11' "^[[23;_~"
275 assert_extended_key
'F12' "^[[24;_~"
277 assert_extended_key
'Up' '^[[1;_A'
278 assert_extended_key
'Down' '^[[1;_B'
279 assert_extended_key
'Right' '^[[1;_C'
280 assert_extended_key
'Left' '^[[1;_D'
282 assert_extended_key
'Home' '^[[1;_H'
283 assert_extended_key
'End' '^[[1;_F'
285 assert_extended_key
'PPage' '^[[5;_~'
286 assert_extended_key
'PageUp' '^[[5;_~'
287 assert_extended_key
'PgUp' '^[[5;_~'
288 assert_extended_key
'NPage' '^[[6;_~'
289 assert_extended_key
'PageDown' '^[[6;_~'
290 assert_extended_key
'PgDn' '^[[6;_~'
292 assert_extended_key
'IC' '^[[2;_~'
293 assert_extended_key
'Insert' '^[[2;_~'
294 assert_extended_key
'DC' '^[[3;_~'
295 assert_extended_key
'Delete' '^[[3;_~'
297 assert_key
'C-Tab' "^[[27;5;9~"
298 assert_key
'C-S-Tab' "^[[27;6;9~"
300 $TMUX kill-server
2>/dev
/null