File Coverage

blib/lib/Termbox/PP/Terminfo/Builtin.pm
Criterion Covered Total %
statement 16 16 100.0
branch n/a
condition n/a
subroutine 6 6 100.0
pod n/a
total 22 22 100.0


line stmt bran cond sub pod time code
1             # ------------------------------------------------------------------------
2             #
3             # Termbox (Perl port)
4             #
5             # Implementation based on termbox2 v2.7.0-dev, 8. Feb 2026
6             #
7             # Copyright (C) 2010-2020 nsf
8             # 2015-2026 Adam Saponara
9             #
10             # ------------------------------------------------------------------------
11             # Author: 2024-2026 J. Schneider
12             # ------------------------------------------------------------------------
13            
14             package Termbox::PP::Terminfo::Builtin;
15            
16             # ------------------------------------------------------------------------
17             # Boilerplate ------------------------------------------------------------
18             # ------------------------------------------------------------------------
19            
20 4     4   175982 use 5.010;
  4         9  
21 4     4   73 use strict;
  4         5  
  4         131  
22 4     4   26 use warnings;
  4         5  
  4         187  
23            
24             # version '...'
25 4     4   689 use version;
  4         3192  
  4         49  
26             our $version = version->declare('v2.7.0_0');
27             our $VERSION = version->declare('v0.4.0');
28            
29             # authority '...'
30             our $authority = 'github:adsr';
31             our $AUTHORITY = 'github:brickpool';
32            
33             BEGIN {
34 4     4   1807 require Termbox::PP;
35 4         2567 Termbox->import(qw(
36             /^TB_KEY_/
37             /^TB_MOD_/
38             ));
39             }
40            
41             # ------------------------------------------------------------------------
42             # Exports ----------------------------------------------------------------
43             # ------------------------------------------------------------------------
44            
45 4     4   25 use Exporter 'import';
  4         6  
  4         14052  
46            
47             our @EXPORT_OK = qw(
48             @terminfo_cap_indexes
49             %builtin_terms
50             @builtin_terms_orders
51             %builtin_mod_caps
52             );
53            
54             # ------------------------------------------------------------------------
55             # Variables --------------------------------------------------------------
56             # ------------------------------------------------------------------------
57            
58             our @terminfo_cap_indexes = (
59             66, # kf1 (TB_CAP_F1)
60             68, # kf2 (TB_CAP_F2)
61             69, # kf3 (TB_CAP_F3)
62             70, # kf4 (TB_CAP_F4)
63             71, # kf5 (TB_CAP_F5)
64             72, # kf6 (TB_CAP_F6)
65             73, # kf7 (TB_CAP_F7)
66             74, # kf8 (TB_CAP_F8)
67             75, # kf9 (TB_CAP_F9)
68             67, # kf10 (TB_CAP_F10)
69             216, # kf11 (TB_CAP_F11)
70             217, # kf12 (TB_CAP_F12)
71             77, # kich1 (TB_CAP_INSERT)
72             59, # kdch1 (TB_CAP_DELETE)
73             76, # khome (TB_CAP_HOME)
74             164, # kend (TB_CAP_END)
75             82, # kpp (TB_CAP_PGUP)
76             81, # knp (TB_CAP_PGDN)
77             87, # kcuu1 (TB_CAP_ARROW_UP)
78             61, # kcud1 (TB_CAP_ARROW_DOWN)
79             79, # kcub1 (TB_CAP_ARROW_LEFT)
80             83, # kcuf1 (TB_CAP_ARROW_RIGHT)
81             148, # kcbt (TB_CAP_BACK_TAB)
82             28, # smcup (TB_CAP_ENTER_CA)
83             40, # rmcup (TB_CAP_EXIT_CA)
84             16, # cnorm (TB_CAP_SHOW_CURSOR)
85             13, # civis (TB_CAP_HIDE_CURSOR)
86             5, # clear (TB_CAP_CLEAR_SCREEN)
87             39, # sgr0 (TB_CAP_SGR0)
88             36, # smul (TB_CAP_UNDERLINE)
89             27, # bold (TB_CAP_BOLD)
90             26, # blink (TB_CAP_BLINK)
91             311, # sitm (TB_CAP_ITALIC)
92             34, # rev (TB_CAP_REVERSE)
93             89, # smkx (TB_CAP_ENTER_KEYPAD)
94             88, # rmkx (TB_CAP_EXIT_KEYPAD)
95             30, # dim (TB_CAP_DIM)
96             32, # invis (TB_CAP_INVISIBLE)
97             );
98            
99             # Terminal capability tables (Escape-Sequenzen)
100             our %builtin_terms = (
101             xterm => [
102             "\eOP", # kf1 (TB_CAP_F1)
103             "\eOQ", # kf2 (TB_CAP_F2)
104             "\eOR", # kf3 (TB_CAP_F3)
105             "\eOS", # kf4 (TB_CAP_F4)
106             "\e[15~", # kf5 (TB_CAP_F5)
107             "\e[17~", # kf6 (TB_CAP_F6)
108             "\e[18~", # kf7 (TB_CAP_F7)
109             "\e[19~", # kf8 (TB_CAP_F8)
110             "\e[20~", # kf9 (TB_CAP_F9)
111             "\e[21~", # kf10 (TB_CAP_F10)
112             "\e[23~", # kf11 (TB_CAP_F11)
113             "\e[24~", # kf12 (TB_CAP_F12)
114             "\e[2~", # insert (TB_CAP_INSERT)
115             "\e[3~", # delete (TB_CAP_DELETE)
116             "\eOH", # home (TB_CAP_HOME)
117             "\eOF", # end (TB_CAP_END)
118             "\e[5~", # page up (TB_CAP_PGUP)
119             "\e[6~", # page down (TB_CAP_PGDN)
120             "\eOA", # arrow up (TB_CAP_ARROW_UP)
121             "\eOB", # arrow down (TB_CAP_ARROW_DOWN)
122             "\eOD", # arrow left (TB_CAP_ARROW_LEFT)
123             "\eOC", # arrow right (TB_CAP_ARROW_RIGHT)
124             "\e[Z", # back tab (TB_CAP_BACK_TAB)
125             "\e[?1049h\e[22;0;0t", # enter ca mode (TB_CAP_ENTER_CA)
126             "\e[?1049l\e[23;0;0t", # exit ca mode (TB_CAP_EXIT_CA)
127             "\e[?12l\e[?25h", # show cursor (TB_CAP_SHOW_CURSOR)
128             "\e[?25l", # hide cursor (TB_CAP_HIDE_CURSOR)
129             "\e[H\e[2J", # clear screen (TB_CAP_CLEAR_SCREEN)
130             "\e(B\e[m", # sgr0 (TB_CAP_SGR0)
131             "\e[4m", # underline (TB_CAP_UNDERLINE)
132             "\e[1m", # bold (TB_CAP_BOLD)
133             "\e[5m", # blink (TB_CAP_BLINK)
134             "\e[3m", # italic (TB_CAP_ITALIC)
135             "\e[7m", # reverse (TB_CAP_REVERSE)
136             "\e[?1h\e=", # enter keypad (TB_CAP_ENTER_KEYPAD)
137             "\e[?1l\e>", # exit keypad (TB_CAP_EXIT_KEYPAD)
138             "\e[2m", # dim (TB_CAP_DIM)
139             "\e[8m", # invisible (TB_CAP_INVISIBLE)
140             ],
141             linux => [
142             "\e[[A", # kf1 (TB_CAP_F1)
143             "\e[[B", # kf2 (TB_CAP_F2)
144             "\e[[C", # kf3 (TB_CAP_F3)
145             "\e[[D", # kf4 (TB_CAP_F4)
146             "\e[[E", # kf5 (TB_CAP_F5)
147             "\e[17~", # kf6 (TB_CAP_F6)
148             "\e[18~", # kf7 (TB_CAP_F7)
149             "\e[19~", # kf8 (TB_CAP_F8)
150             "\e[20~", # kf9 (TB_CAP_F9)
151             "\e[21~", # kf10 (TB_CAP_F10)
152             "\e[23~", # kf11 (TB_CAP_F11)
153             "\e[24~", # kf12 (TB_CAP_F12)
154             "\e[2~", # insert (TB_CAP_INSERT)
155             "\e[3~", # delete (TB_CAP_DELETE)
156             "\e[1~", # home (TB_CAP_HOME)
157             "\e[4~", # end (TB_CAP_END)
158             "\e[5~", # page up (TB_CAP_PGUP)
159             "\e[6~", # page down (TB_CAP_PGDN)
160             "\e[A", # arrow up (TB_CAP_ARROW_UP)
161             "\e[B", # arrow down (TB_CAP_ARROW_DOWN)
162             "\e[D", # arrow left (TB_CAP_ARROW_LEFT)
163             "\e[C", # arrow right (TB_CAP_ARROW_RIGHT)
164             "\e\011", # back tab (TB_CAP_BACK_TAB)
165             "", # enter ca mode (TB_CAP_ENTER_CA)
166             "", # exit ca mode (TB_CAP_EXIT_CA)
167             "\e[?25h\e[?0c", # show cursor (TB_CAP_SHOW_CURSOR)
168             "\e[?25l\e[?1c", # hide cursor (TB_CAP_HIDE_CURSOR)
169             "\e[H\e[J", # clear screen (TB_CAP_CLEAR_SCREEN)
170             "\e[m\017", # sgr0 (TB_CAP_SGR0)
171             "\e[4m", # underline (TB_CAP_UNDERLINE)
172             "\e[1m", # bold (TB_CAP_BOLD)
173             "\e[5m", # blink (TB_CAP_BLINK)
174             "", # italic (TB_CAP_ITALIC)
175             "\e[7m", # reverse (TB_CAP_REVERSE)
176             "", # enter keypad (TB_CAP_ENTER_KEYPAD)
177             "", # exit keypad (TB_CAP_EXIT_KEYPAD)
178             "\e[2m", # dim (TB_CAP_DIM)
179             "", # invisible (TB_CAP_INVISIBLE)
180             ],
181             screen => [
182             "\eOP", # kf1 (TB_CAP_F1)
183             "\eOQ", # kf2 (TB_CAP_F2)
184             "\eOR", # kf3 (TB_CAP_F3)
185             "\eOS", # kf4 (TB_CAP_F4)
186             "\e[15~", # kf5 (TB_CAP_F5)
187             "\e[17~", # kf6 (TB_CAP_F6)
188             "\e[18~", # kf7 (TB_CAP_F7)
189             "\e[19~", # kf8 (TB_CAP_F8)
190             "\e[20~", # kf9 (TB_CAP_F9)
191             "\e[21~", # kf10 (TB_CAP_F10)
192             "\e[23~", # kf11 (TB_CAP_F11)
193             "\e[24~", # kf12 (TB_CAP_F12)
194             "\e[2~", # insert (TB_CAP_INSERT)
195             "\e[3~", # delete (TB_CAP_DELETE)
196             "\e[1~", # home (TB_CAP_HOME)
197             "\e[4~", # end (TB_CAP_END)
198             "\e[5~", # page up (TB_CAP_PGUP)
199             "\e[6~", # page down (TB_CAP_PGDN)
200             "\eOA", # arrow up (TB_CAP_ARROW_UP)
201             "\eOB", # arrow down (TB_CAP_ARROW_DOWN)
202             "\eOD", # arrow left (TB_CAP_ARROW_LEFT)
203             "\eOC", # arrow right (TB_CAP_ARROW_RIGHT)
204             "\e[Z", # back tab (TB_CAP_BACK_TAB)
205             "\e[?1049h", # enter ca mode (TB_CAP_ENTER_CA)
206             "\e[?1049l", # exit ca mode (TB_CAP_EXIT_CA)
207             "\e[34h\e[?25h", # show cursor (TB_CAP_SHOW_CURSOR)
208             "\e[?25l", # hide cursor (TB_CAP_HIDE_CURSOR)
209             "\e[H\e[J", # clear screen (TB_CAP_CLEAR_SCREEN)
210             "\e[m\017", # sgr0 (TB_CAP_SGR0)
211             "\e[4m", # underline (TB_CAP_UNDERLINE)
212             "\e[1m", # bold (TB_CAP_BOLD)
213             "\e[5m", # blink (TB_CAP_BLINK)
214             "", # italic (TB_CAP_ITALIC)
215             "\e[7m", # reverse (TB_CAP_REVERSE)
216             "\e[?1h\e=", # enter keypad (TB_CAP_ENTER_KEYPAD)
217             "\e[?1l\e>", # exit keypad (TB_CAP_EXIT_KEYPAD)
218             "\e[2m", # dim (TB_CAP_DIM)
219             "", # invisible (TB_CAP_INVISIBLE)
220             ],
221             'rxvt-256color' => [
222             "\e[11~", # kf1 (TB_CAP_F1)
223             "\e[12~", # kf2 (TB_CAP_F2)
224             "\e[13~", # kf3 (TB_CAP_F3)
225             "\e[14~", # kf4 (TB_CAP_F4)
226             "\e[15~", # kf5 (TB_CAP_F5)
227             "\e[17~", # kf6 (TB_CAP_F6)
228             "\e[18~", # kf7 (TB_CAP_F7)
229             "\e[19~", # kf8 (TB_CAP_F8)
230             "\e[20~", # kf9 (TB_CAP_F9)
231             "\e[21~", # kf10 (TB_CAP_F10)
232             "\e[23~", # kf11 (TB_CAP_F11)
233             "\e[24~", # kf12 (TB_CAP_F12)
234             "\e[2~", # insert (TB_CAP_INSERT)
235             "\e[3~", # delete (TB_CAP_DELETE)
236             "\e[7~", # home (TB_CAP_HOME)
237             "\e[8~", # end (TB_CAP_END)
238             "\e[5~", # page up (TB_CAP_PGUP)
239             "\e[6~", # page down (TB_CAP_PGDN)
240             "\e[A", # arrow up (TB_CAP_ARROW_UP)
241             "\e[B", # arrow down (TB_CAP_ARROW_DOWN)
242             "\e[D", # arrow left (TB_CAP_ARROW_LEFT)
243             "\e[C", # arrow right (TB_CAP_ARROW_RIGHT)
244             "\e[Z", # back tab (TB_CAP_BACK_TAB)
245             "\e7\e[?47h", # enter ca mode (TB_CAP_ENTER_CA)
246             "\e[2J\e[?47l\e8", # exit ca mode (TB_CAP_EXIT_CA)
247             "\e[?25h", # show cursor (TB_CAP_SHOW_CURSOR)
248             "\e[?25l", # hide cursor (TB_CAP_HIDE_CURSOR)
249             "\e[H\e[2J", # clear screen (TB_CAP_CLEAR_SCREEN)
250             "\e[m\017", # sgr0 (TB_CAP_SGR0)
251             "\e[4m", # underline (TB_CAP_UNDERLINE)
252             "\e[1m", # bold (TB_CAP_BOLD)
253             "\e[5m", # blink (TB_CAP_BLINK)
254             "", # italic (TB_CAP_ITALIC)
255             "\e[7m", # reverse (TB_CAP_REVERSE)
256             "\e=", # enter keypad (TB_CAP_ENTER_KEYPAD)
257             "\e>", # exit keypad (TB_CAP_EXIT_KEYPAD)
258             "", # dim (TB_CAP_DIM)
259             "", # invisible (TB_CAP_INVISIBLE)
260             ],
261             'rxvt-unicode' => [
262             "\e[11~", # kf1 (TB_CAP_F1)
263             "\e[12~", # kf2 (TB_CAP_F2)
264             "\e[13~", # kf3 (TB_CAP_F3)
265             "\e[14~", # kf4 (TB_CAP_F4)
266             "\e[15~", # kf5 (TB_CAP_F5)
267             "\e[17~", # kf6 (TB_CAP_F6)
268             "\e[18~", # kf7 (TB_CAP_F7)
269             "\e[19~", # kf8 (TB_CAP_F8)
270             "\e[20~", # kf9 (TB_CAP_F9)
271             "\e[21~", # kf10 (TB_CAP_F10)
272             "\e[23~", # kf11 (TB_CAP_F11)
273             "\e[24~", # kf12 (TB_CAP_F12)
274             "\e[2~", # insert (TB_CAP_INSERT)
275             "\e[3~", # delete (TB_CAP_DELETE)
276             "\e[7~", # home (TB_CAP_HOME)
277             "\e[8~", # end (TB_CAP_END)
278             "\e[5~", # page up (TB_CAP_PGUP)
279             "\e[6~", # page down (TB_CAP_PGDN)
280             "\e[A", # arrow up (TB_CAP_ARROW_UP)
281             "\e[B", # arrow down (TB_CAP_ARROW_DOWN)
282             "\e[D", # arrow left (TB_CAP_ARROW_LEFT)
283             "\e[C", # arrow right (TB_CAP_ARROW_RIGHT)
284             "\e[Z", # back tab (TB_CAP_BACK_TAB)
285             "\e[?1049h", # enter ca mode (TB_CAP_ENTER_CA)
286             "\e[r\e[?1049l", # exit ca mode (TB_CAP_EXIT_CA)
287             "\e[?12l\e[?25h", # show cursor (TB_CAP_SHOW_CURSOR)
288             "\e[?25l", # hide cursor (TB_CAP_HIDE_CURSOR)
289             "\e[H\e[2J", # clear screen (TB_CAP_CLEAR_SCREEN)
290             "\e[m\e(B", # sgr0 (TB_CAP_SGR0)
291             "\e[4m", # underline (TB_CAP_UNDERLINE)
292             "\e[1m", # bold (TB_CAP_BOLD)
293             "\e[5m", # blink (TB_CAP_BLINK)
294             "\e[3m", # italic (TB_CAP_ITALIC)
295             "\e[7m", # reverse (TB_CAP_REVERSE)
296             "\e=", # enter keypad (TB_CAP_ENTER_KEYPAD)
297             "\e>", # exit keypad (TB_CAP_EXIT_KEYPAD)
298             "", # dim (TB_CAP_DIM)
299             "", # invisible (TB_CAP_INVISIBLE)
300             ],
301             Eterm => [
302             "\e[11~", # kf1 (TB_CAP_F1)
303             "\e[12~", # kf2 (TB_CAP_F2)
304             "\e[13~", # kf3 (TB_CAP_F3)
305             "\e[14~", # kf4 (TB_CAP_F4)
306             "\e[15~", # kf5 (TB_CAP_F5)
307             "\e[17~", # kf6 (TB_CAP_F6)
308             "\e[18~", # kf7 (TB_CAP_F7)
309             "\e[19~", # kf8 (TB_CAP_F8)
310             "\e[20~", # kf9 (TB_CAP_F9)
311             "\e[21~", # kf10 (TB_CAP_F10)
312             "\e[23~", # kf11 (TB_CAP_F11)
313             "\e[24~", # kf12 (TB_CAP_F12)
314             "\e[2~", # insert (TB_CAP_INSERT)
315             "\e[3~", # delete (TB_CAP_DELETE)
316             "\e[7~", # home (TB_CAP_HOME)
317             "\e[8~", # end (TB_CAP_END)
318             "\e[5~", # page up (TB_CAP_PGUP)
319             "\e[6~", # page down (TB_CAP_PGDN)
320             "\e[A", # arrow up (TB_CAP_ARROW_UP)
321             "\e[B", # arrow down (TB_CAP_ARROW_DOWN)
322             "\e[D", # arrow left (TB_CAP_ARROW_LEFT)
323             "\e[C", # arrow right (TB_CAP_ARROW_RIGHT)
324             "", # back tab (TB_CAP_BACK_TAB)
325             "\e7\e[?47h", # enter ca mode (TB_CAP_ENTER_CA)
326             "\e[2J\e[?47l\e8", # exit ca mode (TB_CAP_EXIT_CA)
327             "\e[?25h", # show cursor (TB_CAP_SHOW_CURSOR)
328             "\e[?25l", # hide cursor (TB_CAP_HIDE_CURSOR)
329             "\e[H\e[2J", # clear screen (TB_CAP_CLEAR_SCREEN)
330             "\e[m\017", # sgr0 (TB_CAP_SGR0)
331             "\e[4m", # underline (TB_CAP_UNDERLINE)
332             "\e[1m", # bold (TB_CAP_BOLD)
333             "\e[5m", # blink (TB_CAP_BLINK)
334             "", # italic (TB_CAP_ITALIC)
335             "\e[7m", # reverse (TB_CAP_REVERSE)
336             "", # enter keypad (TB_CAP_ENTER_KEYPAD)
337             "", # exit keypad (TB_CAP_EXIT_KEYPAD)
338             "", # dim (TB_CAP_DIM)
339             "", # invisible (TB_CAP_INVISIBLE)
340             ],
341             );
342            
343             $builtin_terms{tmux} = $builtin_terms{screen};
344             $builtin_terms{rxvt} = $builtin_terms{"rxvt-unicode"};
345            
346             our @builtin_terms_orders = qw(
347             xterm
348             linux
349             screen tmux
350             rxvt-256color
351             rxvt-unicode rxvt
352             Eterm
353             );
354            
355             our %builtin_mod_caps = (
356             # xterm arrows
357             "\e[1;2A" => { key => TB_KEY_ARROW_UP, mod => TB_MOD_SHIFT },
358             "\e[1;3A" => { key => TB_KEY_ARROW_UP, mod => TB_MOD_ALT },
359             "\e[1;4A" => { key => TB_KEY_ARROW_UP, mod => TB_MOD_ALT | TB_MOD_SHIFT },
360             "\e[1;5A" => { key => TB_KEY_ARROW_UP, mod => TB_MOD_CTRL },
361             "\e[1;6A" => { key => TB_KEY_ARROW_UP, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
362             "\e[1;7A" => { key => TB_KEY_ARROW_UP, mod => TB_MOD_CTRL | TB_MOD_ALT },
363             "\e[1;8A" => { key => TB_KEY_ARROW_UP, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
364            
365             "\e[1;2B" => { key => TB_KEY_ARROW_DOWN, mod => TB_MOD_SHIFT },
366             "\e[1;3B" => { key => TB_KEY_ARROW_DOWN, mod => TB_MOD_ALT },
367             "\e[1;4B" => { key => TB_KEY_ARROW_DOWN, mod => TB_MOD_ALT | TB_MOD_SHIFT },
368             "\e[1;5B" => { key => TB_KEY_ARROW_DOWN, mod => TB_MOD_CTRL },
369             "\e[1;6B" => { key => TB_KEY_ARROW_DOWN, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
370             "\e[1;7B" => { key => TB_KEY_ARROW_DOWN, mod => TB_MOD_CTRL | TB_MOD_ALT },
371             "\e[1;8B" => { key => TB_KEY_ARROW_DOWN, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
372            
373             "\e[1;2C" => { key => TB_KEY_ARROW_RIGHT, mod => TB_MOD_SHIFT },
374             "\e[1;3C" => { key => TB_KEY_ARROW_RIGHT, mod => TB_MOD_ALT },
375             "\e[1;4C" => { key => TB_KEY_ARROW_RIGHT, mod => TB_MOD_ALT | TB_MOD_SHIFT },
376             "\e[1;5C" => { key => TB_KEY_ARROW_RIGHT, mod => TB_MOD_CTRL },
377             "\e[1;6C" => { key => TB_KEY_ARROW_RIGHT, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
378             "\e[1;7C" => { key => TB_KEY_ARROW_RIGHT, mod => TB_MOD_CTRL | TB_MOD_ALT },
379             "\e[1;8C" => { key => TB_KEY_ARROW_RIGHT, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
380            
381             "\e[1;2D" => { key => TB_KEY_ARROW_LEFT, mod => TB_MOD_SHIFT },
382             "\e[1;3D" => { key => TB_KEY_ARROW_LEFT, mod => TB_MOD_ALT },
383             "\e[1;4D" => { key => TB_KEY_ARROW_LEFT, mod => TB_MOD_ALT | TB_MOD_SHIFT },
384             "\e[1;5D" => { key => TB_KEY_ARROW_LEFT, mod => TB_MOD_CTRL },
385             "\e[1;6D" => { key => TB_KEY_ARROW_LEFT, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
386             "\e[1;7D" => { key => TB_KEY_ARROW_LEFT, mod => TB_MOD_CTRL | TB_MOD_ALT },
387             "\e[1;8D" => { key => TB_KEY_ARROW_LEFT, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
388            
389             # xterm keys
390             "\e[1;2H" => { key => TB_KEY_HOME, mod => TB_MOD_SHIFT },
391             "\e[1;3H" => { key => TB_KEY_HOME, mod => TB_MOD_ALT },
392             "\e[1;4H" => { key => TB_KEY_HOME, mod => TB_MOD_ALT | TB_MOD_SHIFT },
393             "\e[1;5H" => { key => TB_KEY_HOME, mod => TB_MOD_CTRL },
394             "\e[1;6H" => { key => TB_KEY_HOME, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
395             "\e[1;7H" => { key => TB_KEY_HOME, mod => TB_MOD_CTRL | TB_MOD_ALT },
396             "\e[1;8H" => { key => TB_KEY_HOME, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
397            
398             "\e[1;2F" => { key => TB_KEY_END, mod => TB_MOD_SHIFT },
399             "\e[1;3F" => { key => TB_KEY_END, mod => TB_MOD_ALT },
400             "\e[1;4F" => { key => TB_KEY_END, mod => TB_MOD_ALT | TB_MOD_SHIFT },
401             "\e[1;5F" => { key => TB_KEY_END, mod => TB_MOD_CTRL },
402             "\e[1;6F" => { key => TB_KEY_END, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
403             "\e[1;7F" => { key => TB_KEY_END, mod => TB_MOD_CTRL | TB_MOD_ALT },
404             "\e[1;8F" => { key => TB_KEY_END, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
405            
406             "\e[2;2~" => { key => TB_KEY_INSERT, mod => TB_MOD_SHIFT },
407             "\e[2;3~" => { key => TB_KEY_INSERT, mod => TB_MOD_ALT },
408             "\e[2;4~" => { key => TB_KEY_INSERT, mod => TB_MOD_ALT | TB_MOD_SHIFT },
409             "\e[2;5~" => { key => TB_KEY_INSERT, mod => TB_MOD_CTRL },
410             "\e[2;6~" => { key => TB_KEY_INSERT, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
411             "\e[2;7~" => { key => TB_KEY_INSERT, mod => TB_MOD_CTRL | TB_MOD_ALT },
412             "\e[2;8~" => { key => TB_KEY_INSERT, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
413            
414             "\e[3;2~" => { key => TB_KEY_DELETE, mod => TB_MOD_SHIFT },
415             "\e[3;3~" => { key => TB_KEY_DELETE, mod => TB_MOD_ALT },
416             "\e[3;4~" => { key => TB_KEY_DELETE, mod => TB_MOD_ALT | TB_MOD_SHIFT },
417             "\e[3;5~" => { key => TB_KEY_DELETE, mod => TB_MOD_CTRL },
418             "\e[3;6~" => { key => TB_KEY_DELETE, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
419             "\e[3;7~" => { key => TB_KEY_DELETE, mod => TB_MOD_CTRL | TB_MOD_ALT },
420             "\e[3;8~" => { key => TB_KEY_DELETE, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
421            
422             "\e[5;2~" => { key => TB_KEY_PGUP, mod => TB_MOD_SHIFT },
423             "\e[5;3~" => { key => TB_KEY_PGUP, mod => TB_MOD_ALT },
424             "\e[5;4~" => { key => TB_KEY_PGUP, mod => TB_MOD_ALT | TB_MOD_SHIFT },
425             "\e[5;5~" => { key => TB_KEY_PGUP, mod => TB_MOD_CTRL },
426             "\e[5;6~" => { key => TB_KEY_PGUP, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
427             "\e[5;7~" => { key => TB_KEY_PGUP, mod => TB_MOD_CTRL | TB_MOD_ALT },
428             "\e[5;8~" => { key => TB_KEY_PGUP, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
429            
430             "\e[6;2~" => { key => TB_KEY_PGDN, mod => TB_MOD_SHIFT },
431             "\e[6;3~" => { key => TB_KEY_PGDN, mod => TB_MOD_ALT },
432             "\e[6;4~" => { key => TB_KEY_PGDN, mod => TB_MOD_ALT | TB_MOD_SHIFT },
433             "\e[6;5~" => { key => TB_KEY_PGDN, mod => TB_MOD_CTRL },
434             "\e[6;6~" => { key => TB_KEY_PGDN, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
435             "\e[6;7~" => { key => TB_KEY_PGDN, mod => TB_MOD_CTRL | TB_MOD_ALT },
436             "\e[6;8~" => { key => TB_KEY_PGDN, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
437            
438             "\e[1;2P" => { key => TB_KEY_F1, mod => TB_MOD_SHIFT },
439             "\e[1;3P" => { key => TB_KEY_F1, mod => TB_MOD_ALT },
440             "\e[1;4P" => { key => TB_KEY_F1, mod => TB_MOD_ALT | TB_MOD_SHIFT },
441             "\e[1;5P" => { key => TB_KEY_F1, mod => TB_MOD_CTRL },
442             "\e[1;6P" => { key => TB_KEY_F1, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
443             "\e[1;7P" => { key => TB_KEY_F1, mod => TB_MOD_CTRL | TB_MOD_ALT },
444             "\e[1;8P" => { key => TB_KEY_F1, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
445            
446             "\e[1;2Q" => { key => TB_KEY_F2, mod => TB_MOD_SHIFT },
447             "\e[1;3Q" => { key => TB_KEY_F2, mod => TB_MOD_ALT },
448             "\e[1;4Q" => { key => TB_KEY_F2, mod => TB_MOD_ALT | TB_MOD_SHIFT },
449             "\e[1;5Q" => { key => TB_KEY_F2, mod => TB_MOD_CTRL },
450             "\e[1;6Q" => { key => TB_KEY_F2, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
451             "\e[1;7Q" => { key => TB_KEY_F2, mod => TB_MOD_CTRL | TB_MOD_ALT },
452             "\e[1;8Q" => { key => TB_KEY_F2, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
453            
454             "\e[1;2R" => { key => TB_KEY_F3, mod => TB_MOD_SHIFT },
455             "\e[1;3R" => { key => TB_KEY_F3, mod => TB_MOD_ALT },
456             "\e[1;4R" => { key => TB_KEY_F3, mod => TB_MOD_ALT | TB_MOD_SHIFT },
457             "\e[1;5R" => { key => TB_KEY_F3, mod => TB_MOD_CTRL },
458             "\e[1;6R" => { key => TB_KEY_F3, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
459             "\e[1;7R" => { key => TB_KEY_F3, mod => TB_MOD_CTRL | TB_MOD_ALT },
460             "\e[1;8R" => { key => TB_KEY_F3, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
461            
462             "\e[1;2S" => { key => TB_KEY_F4, mod => TB_MOD_SHIFT },
463             "\e[1;3S" => { key => TB_KEY_F4, mod => TB_MOD_ALT },
464             "\e[1;4S" => { key => TB_KEY_F4, mod => TB_MOD_ALT | TB_MOD_SHIFT },
465             "\e[1;5S" => { key => TB_KEY_F4, mod => TB_MOD_CTRL },
466             "\e[1;6S" => { key => TB_KEY_F4, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
467             "\e[1;7S" => { key => TB_KEY_F4, mod => TB_MOD_CTRL | TB_MOD_ALT },
468             "\e[1;8S" => { key => TB_KEY_F4, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
469            
470             "\e[15;2~" => { key => TB_KEY_F5, mod => TB_MOD_SHIFT },
471             "\e[15;3~" => { key => TB_KEY_F5, mod => TB_MOD_ALT },
472             "\e[15;4~" => { key => TB_KEY_F5, mod => TB_MOD_ALT | TB_MOD_SHIFT },
473             "\e[15;5~" => { key => TB_KEY_F5, mod => TB_MOD_CTRL },
474             "\e[15;6~" => { key => TB_KEY_F5, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
475             "\e[15;7~" => { key => TB_KEY_F5, mod => TB_MOD_CTRL | TB_MOD_ALT },
476             "\e[15;8~" => { key => TB_KEY_F5, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
477            
478             "\e[17;2~" => { key => TB_KEY_F6, mod => TB_MOD_SHIFT },
479             "\e[17;3~" => { key => TB_KEY_F6, mod => TB_MOD_ALT },
480             "\e[17;4~" => { key => TB_KEY_F6, mod => TB_MOD_ALT | TB_MOD_SHIFT },
481             "\e[17;5~" => { key => TB_KEY_F6, mod => TB_MOD_CTRL },
482             "\e[17;6~" => { key => TB_KEY_F6, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
483             "\e[17;7~" => { key => TB_KEY_F6, mod => TB_MOD_CTRL | TB_MOD_ALT },
484             "\e[17;8~" => { key => TB_KEY_F6, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
485            
486             "\e[18;2~" => { key => TB_KEY_F7, mod => TB_MOD_SHIFT },
487             "\e[18;3~" => { key => TB_KEY_F7, mod => TB_MOD_ALT },
488             "\e[18;4~" => { key => TB_KEY_F7, mod => TB_MOD_ALT | TB_MOD_SHIFT },
489             "\e[18;5~" => { key => TB_KEY_F7, mod => TB_MOD_CTRL },
490             "\e[18;6~" => { key => TB_KEY_F7, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
491             "\e[18;7~" => { key => TB_KEY_F7, mod => TB_MOD_CTRL | TB_MOD_ALT },
492             "\e[18;8~" => { key => TB_KEY_F7, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
493            
494             "\e[19;2~" => { key => TB_KEY_F8, mod => TB_MOD_SHIFT },
495             "\e[19;3~" => { key => TB_KEY_F8, mod => TB_MOD_ALT },
496             "\e[19;4~" => { key => TB_KEY_F8, mod => TB_MOD_ALT | TB_MOD_SHIFT },
497             "\e[19;5~" => { key => TB_KEY_F8, mod => TB_MOD_CTRL },
498             "\e[19;6~" => { key => TB_KEY_F8, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
499             "\e[19;7~" => { key => TB_KEY_F8, mod => TB_MOD_CTRL | TB_MOD_ALT },
500             "\e[19;8~" => { key => TB_KEY_F8, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
501            
502             "\e[20;2~" => { key => TB_KEY_F9, mod => TB_MOD_SHIFT },
503             "\e[20;3~" => { key => TB_KEY_F9, mod => TB_MOD_ALT },
504             "\e[20;4~" => { key => TB_KEY_F9, mod => TB_MOD_ALT | TB_MOD_SHIFT },
505             "\e[20;5~" => { key => TB_KEY_F9, mod => TB_MOD_CTRL },
506             "\e[20;6~" => { key => TB_KEY_F9, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
507             "\e[20;7~" => { key => TB_KEY_F9, mod => TB_MOD_CTRL | TB_MOD_ALT },
508             "\e[20;8~" => { key => TB_KEY_F9, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
509            
510             "\e[21;2~" => { key => TB_KEY_F10, mod => TB_MOD_SHIFT },
511             "\e[21;3~" => { key => TB_KEY_F10, mod => TB_MOD_ALT },
512             "\e[21;4~" => { key => TB_KEY_F10, mod => TB_MOD_ALT | TB_MOD_SHIFT },
513             "\e[21;5~" => { key => TB_KEY_F10, mod => TB_MOD_CTRL },
514             "\e[21;6~" => { key => TB_KEY_F10, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
515             "\e[21;7~" => { key => TB_KEY_F10, mod => TB_MOD_CTRL | TB_MOD_ALT },
516             "\e[21;8~" => { key => TB_KEY_F10, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
517            
518             "\e[23;2~" => { key => TB_KEY_F11, mod => TB_MOD_SHIFT },
519             "\e[23;3~" => { key => TB_KEY_F11, mod => TB_MOD_ALT },
520             "\e[23;4~" => { key => TB_KEY_F11, mod => TB_MOD_ALT | TB_MOD_SHIFT },
521             "\e[23;5~" => { key => TB_KEY_F11, mod => TB_MOD_CTRL },
522             "\e[23;6~" => { key => TB_KEY_F11, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
523             "\e[23;7~" => { key => TB_KEY_F11, mod => TB_MOD_CTRL | TB_MOD_ALT },
524             "\e[23;8~" => { key => TB_KEY_F11, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
525            
526             "\e[24;2~" => { key => TB_KEY_F12, mod => TB_MOD_SHIFT },
527             "\e[24;3~" => { key => TB_KEY_F12, mod => TB_MOD_ALT },
528             "\e[24;4~" => { key => TB_KEY_F12, mod => TB_MOD_ALT | TB_MOD_SHIFT },
529             "\e[24;5~" => { key => TB_KEY_F12, mod => TB_MOD_CTRL },
530             "\e[24;6~" => { key => TB_KEY_F12, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
531             "\e[24;7~" => { key => TB_KEY_F12, mod => TB_MOD_CTRL | TB_MOD_ALT },
532             "\e[24;8~" => { key => TB_KEY_F12, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
533            
534             # rxvt arrows
535             "\e[a" => { key => TB_KEY_ARROW_UP, mod => TB_MOD_SHIFT },
536             "\e\e[A" => { key => TB_KEY_ARROW_UP, mod => TB_MOD_ALT },
537             "\e\e[a" => { key => TB_KEY_ARROW_UP, mod => TB_MOD_ALT | TB_MOD_SHIFT },
538             "\eOa" => { key => TB_KEY_ARROW_UP, mod => TB_MOD_CTRL },
539             "\e\eOa" => { key => TB_KEY_ARROW_UP, mod => TB_MOD_CTRL | TB_MOD_ALT },
540            
541             "\e[b" => { key => TB_KEY_ARROW_DOWN, mod => TB_MOD_SHIFT },
542             "\e\e[B" => { key => TB_KEY_ARROW_DOWN, mod => TB_MOD_ALT },
543             "\e\e[b" => { key => TB_KEY_ARROW_DOWN, mod => TB_MOD_ALT | TB_MOD_SHIFT },
544             "\eOb" => { key => TB_KEY_ARROW_DOWN, mod => TB_MOD_CTRL },
545             "\e\eOb" => { key => TB_KEY_ARROW_DOWN, mod => TB_MOD_CTRL | TB_MOD_ALT },
546            
547             "\e[c" => { key => TB_KEY_ARROW_RIGHT, mod => TB_MOD_SHIFT },
548             "\e\e[C" => { key => TB_KEY_ARROW_RIGHT, mod => TB_MOD_ALT },
549             "\e\e[c" => { key => TB_KEY_ARROW_RIGHT, mod => TB_MOD_ALT | TB_MOD_SHIFT },
550             "\eOc" => { key => TB_KEY_ARROW_RIGHT, mod => TB_MOD_CTRL },
551             "\e\eOc" => { key => TB_KEY_ARROW_RIGHT, mod => TB_MOD_CTRL | TB_MOD_ALT },
552            
553             "\e[d" => { key => TB_KEY_ARROW_LEFT, mod => TB_MOD_SHIFT },
554             "\e\e[D" => { key => TB_KEY_ARROW_LEFT, mod => TB_MOD_ALT },
555             "\e\e[d" => { key => TB_KEY_ARROW_LEFT, mod => TB_MOD_ALT | TB_MOD_SHIFT },
556             "\eOd" => { key => TB_KEY_ARROW_LEFT, mod => TB_MOD_CTRL },
557             "\e\eOd" => { key => TB_KEY_ARROW_LEFT, mod => TB_MOD_CTRL | TB_MOD_ALT },
558            
559             # rxvt keys
560             "\e[7\$" => { key => TB_KEY_HOME, mod => TB_MOD_SHIFT },
561             "\e\e[7~" => { key => TB_KEY_HOME, mod => TB_MOD_ALT },
562             "\e\e[7\$" => { key => TB_KEY_HOME, mod => TB_MOD_ALT | TB_MOD_SHIFT },
563             "\e[7^" => { key => TB_KEY_HOME, mod => TB_MOD_CTRL },
564             "\e[7@" => { key => TB_KEY_HOME, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
565             "\e\e[7^" => { key => TB_KEY_HOME, mod => TB_MOD_CTRL | TB_MOD_ALT },
566             "\e\e[7@" => { key => TB_KEY_HOME, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
567            
568             "\e\e[8~" => { key => TB_KEY_END, mod => TB_MOD_ALT },
569             "\e\e[8\$" => { key => TB_KEY_END, mod => TB_MOD_ALT | TB_MOD_SHIFT },
570             "\e[8^" => { key => TB_KEY_END, mod => TB_MOD_CTRL },
571             "\e\e[8^" => { key => TB_KEY_END, mod => TB_MOD_CTRL | TB_MOD_ALT },
572             "\e\e[8@" => { key => TB_KEY_END, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
573             "\e[8@" => { key => TB_KEY_END, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
574             "\e[8\$" => { key => TB_KEY_END, mod => TB_MOD_SHIFT },
575            
576             "\e\e[2~" => { key => TB_KEY_INSERT, mod => TB_MOD_ALT },
577             "\e\e[2\$" => { key => TB_KEY_INSERT, mod => TB_MOD_ALT | TB_MOD_SHIFT },
578             "\e[2^" => { key => TB_KEY_INSERT, mod => TB_MOD_CTRL },
579             "\e\e[2^" => { key => TB_KEY_INSERT, mod => TB_MOD_CTRL | TB_MOD_ALT },
580             "\e\e[2@" => { key => TB_KEY_INSERT, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
581             "\e[2@" => { key => TB_KEY_INSERT, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
582             "\e[2\$" => { key => TB_KEY_INSERT, mod => TB_MOD_SHIFT },
583            
584             "\e\e[3~" => { key => TB_KEY_DELETE, mod => TB_MOD_ALT },
585             "\e\e[3\$" => { key => TB_KEY_DELETE, mod => TB_MOD_ALT | TB_MOD_SHIFT },
586             "\e[3^" => { key => TB_KEY_DELETE, mod => TB_MOD_CTRL },
587             "\e\e[3^" => { key => TB_KEY_DELETE, mod => TB_MOD_CTRL | TB_MOD_ALT },
588             "\e\e[3@" => { key => TB_KEY_DELETE, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
589             "\e[3@" => { key => TB_KEY_DELETE, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
590             "\e[3\$" => { key => TB_KEY_DELETE, mod => TB_MOD_SHIFT },
591            
592             "\e\e[5~" => { key => TB_KEY_PGUP, mod => TB_MOD_ALT },
593             "\e\e[5\$" => { key => TB_KEY_PGUP, mod => TB_MOD_ALT | TB_MOD_SHIFT },
594             "\e[5^" => { key => TB_KEY_PGUP, mod => TB_MOD_CTRL },
595             "\e\e[5^" => { key => TB_KEY_PGUP, mod => TB_MOD_CTRL | TB_MOD_ALT },
596             "\e\e[5@" => { key => TB_KEY_PGUP, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
597             "\e[5@" => { key => TB_KEY_PGUP, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
598             "\e[5\$" => { key => TB_KEY_PGUP, mod => TB_MOD_SHIFT },
599            
600             "\e\e[6~" => { key => TB_KEY_PGDN, mod => TB_MOD_ALT },
601             "\e\e[6\$" => { key => TB_KEY_PGDN, mod => TB_MOD_ALT | TB_MOD_SHIFT },
602             "\e[6^" => { key => TB_KEY_PGDN, mod => TB_MOD_CTRL },
603             "\e\e[6^" => { key => TB_KEY_PGDN, mod => TB_MOD_CTRL | TB_MOD_ALT },
604             "\e\e[6@" => { key => TB_KEY_PGDN, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
605             "\e[6@" => { key => TB_KEY_PGDN, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
606             "\e[6\$" => { key => TB_KEY_PGDN, mod => TB_MOD_SHIFT },
607            
608             "\e\e[11~" => { key => TB_KEY_F1, mod => TB_MOD_ALT },
609             "\e\e[23~" => { key => TB_KEY_F1, mod => TB_MOD_ALT | TB_MOD_SHIFT },
610             "\e[11^" => { key => TB_KEY_F1, mod => TB_MOD_CTRL },
611             "\e\e[11^" => { key => TB_KEY_F1, mod => TB_MOD_CTRL | TB_MOD_ALT },
612             "\e\e[23^" => { key => TB_KEY_F1, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
613             "\e[23^" => { key => TB_KEY_F1, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
614             "\e[23~" => { key => TB_KEY_F1, mod => TB_MOD_SHIFT },
615            
616             "\e\e[12~" => { key => TB_KEY_F2, mod => TB_MOD_ALT },
617             "\e\e[24~" => { key => TB_KEY_F2, mod => TB_MOD_ALT | TB_MOD_SHIFT },
618             "\e[12^" => { key => TB_KEY_F2, mod => TB_MOD_CTRL },
619             "\e\e[12^" => { key => TB_KEY_F2, mod => TB_MOD_CTRL | TB_MOD_ALT },
620             "\e\e[24^" => { key => TB_KEY_F2, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
621             "\e[24^" => { key => TB_KEY_F2, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
622             "\e[24~" => { key => TB_KEY_F2, mod => TB_MOD_SHIFT },
623            
624             "\e\e[13~" => { key => TB_KEY_F3, mod => TB_MOD_ALT },
625             "\e\e[25~" => { key => TB_KEY_F3, mod => TB_MOD_ALT | TB_MOD_SHIFT },
626             "\e[13^" => { key => TB_KEY_F3, mod => TB_MOD_CTRL },
627             "\e\e[13^" => { key => TB_KEY_F3, mod => TB_MOD_CTRL | TB_MOD_ALT },
628             "\e\e[25^" => { key => TB_KEY_F3, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
629             "\e[25^" => { key => TB_KEY_F3, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
630             "\e[25~" => { key => TB_KEY_F3, mod => TB_MOD_SHIFT },
631            
632             "\e\e[14~" => { key => TB_KEY_F4, mod => TB_MOD_ALT },
633             "\e\e[26~" => { key => TB_KEY_F4, mod => TB_MOD_ALT | TB_MOD_SHIFT },
634             "\e[14^" => { key => TB_KEY_F4, mod => TB_MOD_CTRL },
635             "\e\e[14^" => { key => TB_KEY_F4, mod => TB_MOD_CTRL | TB_MOD_ALT },
636             "\e\e[26^" => { key => TB_KEY_F4, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
637             "\e[26^" => { key => TB_KEY_F4, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
638             "\e[26~" => { key => TB_KEY_F4, mod => TB_MOD_SHIFT },
639            
640             "\e\e[15~" => { key => TB_KEY_F5, mod => TB_MOD_ALT },
641             "\e\e[28~" => { key => TB_KEY_F5, mod => TB_MOD_ALT | TB_MOD_SHIFT },
642             "\e[15^" => { key => TB_KEY_F5, mod => TB_MOD_CTRL },
643             "\e\e[15^" => { key => TB_KEY_F5, mod => TB_MOD_CTRL | TB_MOD_ALT },
644             "\e\e[28^" => { key => TB_KEY_F5, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
645             "\e[28^" => { key => TB_KEY_F5, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
646             "\e[28~" => { key => TB_KEY_F5, mod => TB_MOD_SHIFT },
647            
648             "\e\e[17~" => { key => TB_KEY_F6, mod => TB_MOD_ALT },
649             "\e\e[29~" => { key => TB_KEY_F6, mod => TB_MOD_ALT | TB_MOD_SHIFT },
650             "\e[17^" => { key => TB_KEY_F6, mod => TB_MOD_CTRL },
651             "\e\e[17^" => { key => TB_KEY_F6, mod => TB_MOD_CTRL | TB_MOD_ALT },
652             "\e\e[29^" => { key => TB_KEY_F6, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
653             "\e[29^" => { key => TB_KEY_F6, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
654             "\e[29~" => { key => TB_KEY_F6, mod => TB_MOD_SHIFT },
655            
656             "\e\e[18~" => { key => TB_KEY_F7, mod => TB_MOD_ALT },
657             "\e\e[31~" => { key => TB_KEY_F7, mod => TB_MOD_ALT | TB_MOD_SHIFT },
658             "\e[18^" => { key => TB_KEY_F7, mod => TB_MOD_CTRL },
659             "\e\e[18^" => { key => TB_KEY_F7, mod => TB_MOD_CTRL | TB_MOD_ALT },
660             "\e\e[31^" => { key => TB_KEY_F7, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
661             "\e[31^" => { key => TB_KEY_F7, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
662             "\e[31~" => { key => TB_KEY_F7, mod => TB_MOD_SHIFT },
663            
664             "\e\e[19~" => { key => TB_KEY_F8, mod => TB_MOD_ALT },
665             "\e\e[32~" => { key => TB_KEY_F8, mod => TB_MOD_ALT | TB_MOD_SHIFT },
666             "\e[19^" => { key => TB_KEY_F8, mod => TB_MOD_CTRL },
667             "\e\e[19^" => { key => TB_KEY_F8, mod => TB_MOD_CTRL | TB_MOD_ALT },
668             "\e\e[32^" => { key => TB_KEY_F8, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
669             "\e[32^" => { key => TB_KEY_F8, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
670             "\e[32~" => { key => TB_KEY_F8, mod => TB_MOD_SHIFT },
671            
672             "\e\e[20~" => { key => TB_KEY_F9, mod => TB_MOD_ALT },
673             "\e\e[33~" => { key => TB_KEY_F9, mod => TB_MOD_ALT | TB_MOD_SHIFT },
674             "\e[20^" => { key => TB_KEY_F9, mod => TB_MOD_CTRL },
675             "\e\e[20^" => { key => TB_KEY_F9, mod => TB_MOD_CTRL | TB_MOD_ALT },
676             "\e\e[33^" => { key => TB_KEY_F9, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
677             "\e[33^" => { key => TB_KEY_F9, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
678             "\e[33~" => { key => TB_KEY_F9, mod => TB_MOD_SHIFT },
679            
680             "\e\e[21~" => { key => TB_KEY_F10, mod => TB_MOD_ALT },
681             "\e\e[34~" => { key => TB_KEY_F10, mod => TB_MOD_ALT | TB_MOD_SHIFT },
682             "\e[21^" => { key => TB_KEY_F10, mod => TB_MOD_CTRL },
683             "\e\e[21^" => { key => TB_KEY_F10, mod => TB_MOD_CTRL | TB_MOD_ALT },
684             "\e\e[34^" => { key => TB_KEY_F10, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
685             "\e[34^" => { key => TB_KEY_F10, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
686             "\e[34~" => { key => TB_KEY_F10, mod => TB_MOD_SHIFT },
687            
688             "\e\e[23~" => { key => TB_KEY_F11, mod => TB_MOD_ALT },
689             "\e\e[23\$"=> { key => TB_KEY_F11, mod => TB_MOD_ALT | TB_MOD_SHIFT },
690             "\e[23^" => { key => TB_KEY_F11, mod => TB_MOD_CTRL },
691             "\e\e[23^" => { key => TB_KEY_F11, mod => TB_MOD_CTRL | TB_MOD_ALT },
692             "\e\e[23@" => { key => TB_KEY_F11, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
693             "\e[23@" => { key => TB_KEY_F11, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
694             "\e[23\$" => { key => TB_KEY_F11, mod => TB_MOD_SHIFT },
695            
696             "\e\e[24~" => { key => TB_KEY_F12, mod => TB_MOD_ALT },
697             "\e\e[24\$"=> { key => TB_KEY_F12, mod => TB_MOD_ALT | TB_MOD_SHIFT },
698             "\e[24^" => { key => TB_KEY_F12, mod => TB_MOD_CTRL },
699             "\e\e[24^" => { key => TB_KEY_F12, mod => TB_MOD_CTRL | TB_MOD_ALT },
700             "\e\e[24@" => { key => TB_KEY_F12, mod => TB_MOD_CTRL | TB_MOD_ALT | TB_MOD_SHIFT},
701             "\e[24@" => { key => TB_KEY_F12, mod => TB_MOD_CTRL | TB_MOD_SHIFT },
702             "\e[24\$" => { key => TB_KEY_F12, mod => TB_MOD_SHIFT },
703            
704             # linux console/putty arrows
705             "\e[A" => { key => TB_KEY_ARROW_UP, mod => TB_MOD_SHIFT },
706             "\e[B" => { key => TB_KEY_ARROW_DOWN, mod => TB_MOD_SHIFT },
707             "\e[C" => { key => TB_KEY_ARROW_RIGHT, mod => TB_MOD_SHIFT },
708             "\e[D" => { key => TB_KEY_ARROW_LEFT, mod => TB_MOD_SHIFT },
709            
710             # more putty arrows
711             "\eOA" => { key => TB_KEY_ARROW_UP, mod => TB_MOD_CTRL },
712             "\e\eOA" => { key => TB_KEY_ARROW_UP, mod => TB_MOD_CTRL | TB_MOD_ALT },
713             "\eOB" => { key => TB_KEY_ARROW_DOWN, mod => TB_MOD_CTRL },
714             "\e\eOB" => { key => TB_KEY_ARROW_DOWN, mod => TB_MOD_CTRL | TB_MOD_ALT },
715             "\eOC" => { key => TB_KEY_ARROW_RIGHT, mod => TB_MOD_CTRL },
716             "\e\eOC" => { key => TB_KEY_ARROW_RIGHT, mod => TB_MOD_CTRL | TB_MOD_ALT },
717             "\eOD" => { key => TB_KEY_ARROW_LEFT, mod => TB_MOD_CTRL },
718             "\e\eOD" => { key => TB_KEY_ARROW_LEFT, mod => TB_MOD_CTRL | TB_MOD_ALT },
719             );
720            
721             1;