UNPKG

5.36 kBJavaScriptView Raw
1/*
2 Terminal Kit
3
4 Copyright (c) 2009 - 2020 Cédric Ronvel
5
6 The MIT License (MIT)
7
8 Permission is hereby granted, free of charge, to any person obtaining a copy
9 of this software and associated documentation files (the "Software"), to deal
10 in the Software without restriction, including without limitation the rights
11 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 copies of the Software, and to permit persons to whom the Software is
13 furnished to do so, subject to the following conditions:
14
15 The above copyright notice and this permission notice shall be included in all
16 copies or substantial portions of the Software.
17
18 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
24 SOFTWARE.
25*/
26
27"use strict" ;
28
29
30
31exports.specialKeys = {
32 /*
33 From the Xterm config (lib/termconfig/xterm.js).
34 When multiple keys exist, the chosen one is (by order of preference):
35 - ultimately the sequence that avoid overlapping
36 - the more consistent sequence
37 - the actual Gnome-terminal sequence
38 - the actual Xterm sequence
39 */
40
41 ESCAPE: '\x1b' ,
42 TAB: '\x09' ,
43 ENTER: '\x0d' ,
44
45 SHIFT_TAB: '\x1b[Z' ,
46 ALT_TAB: '\x1b\x09' , // Also CTRL_ALT_I, most of time it is grabbed by the window manager before reaching the terminal
47 ALT_ENTER: '\x1b\x0d' ,
48
49 UP: '\x1bOA' ,
50 DOWN: '\x1bOB' ,
51 RIGHT: '\x1bOC' ,
52 LEFT: '\x1bOD' ,
53
54 SHIFT_UP: '\x1b[1;2A' ,
55 SHIFT_DOWN: '\x1b[1;2B' ,
56 SHIFT_RIGHT: '\x1b[1;2C' ,
57 SHIFT_LEFT: '\x1b[1;2D' ,
58 ALT_UP: '\x1b[1;3A' ,
59 ALT_DOWN: '\x1b[1;3B' ,
60 ALT_RIGHT: '\x1b[1;3C' ,
61 ALT_LEFT: '\x1b[1;3D' ,
62 CTRL_UP: '\x1b[1;5A' ,
63 CTRL_DOWN: '\x1b[1;5B' ,
64 CTRL_RIGHT: '\x1b[1;5C' ,
65 CTRL_LEFT: '\x1b[1;5D' ,
66
67 BACKSPACE: '\x7f' ,
68 INSERT: '\x1b[2~' ,
69 DELETE: '\x1b[3~' ,
70 HOME: '\x1b[1~' ,
71 END: '\x1b[4~' ,
72 PAGE_UP: '\x1b[5~' ,
73 PAGE_DOWN: '\x1b[6~' ,
74
75 CTRL_BACKSPACE: '\x08' ,
76 CTRL_INSERT: '\x1b[2;5~' ,
77 CTRL_DELETE: '\x1b[3;5~' ,
78 CTRL_HOME: '\x1b[1;5~' ,
79 CTRL_END: '\x1b[4;5~' ,
80 CTRL_PAGE_UP: '\x1b[5;5~' ,
81 CTRL_PAGE_DOWN: '\x1b[6;5~' ,
82
83 SHIFT_INSERT: '\x1b[2;2~' ,
84 SHIFT_DELETE: '\x1b[3;2~' ,
85 SHIFT_HOME: '\x1b[1;2~' ,
86 SHIFT_END: '\x1b[4;2~' ,
87 SHIFT_PAGE_UP: '\x1b[5;2~' ,
88 SHIFT_PAGE_DOWN: '\x1b[6;2~' ,
89
90 ALT_BACKSPACE: '\x1b\x7f' ,
91 ALT_INSERT: '\x1b[2;3~' ,
92 ALT_DELETE: '\x1b[3;3~' ,
93 ALT_HOME: '\x1b[1;3~' ,
94 ALT_END: '\x1b[4;3~' ,
95 ALT_PAGE_UP: '\x1b[5;3~' ,
96 ALT_PAGE_DOWN: '\x1b[6;3~' ,
97
98 // Application Keypad
99 /*
100 KP_NUMLOCK: [] , // '\x1bOP' ,
101 KP_DIVIDE: '\x1bOo' ,
102 KP_MULTIPLY: '\x1bOj' ,
103 KP_MINUS: '\x1bOm' ,
104 KP_0: [] , // '\x1b[2~' ,
105 KP_1: [] , // '\x1bOF' ,
106 KP_2: [] , // '\x1b[B' ,
107 KP_3: [] , // '\x1b[6~' ,
108 KP_4: [] , // '\x1b[D' ,
109 KP_5: [ '\x1bOE' , '\x1b[E' ] ,
110 KP_6: [] , // '\x1b[C' ,
111 KP_7: [] , // '\x1bOH' ,
112 KP_8: [] , // '\x1b[A' ,
113 KP_9: [] , // '\x1b[5~' ,
114 KP_PLUS: '\x1bOk' ,
115 KP_DELETE: [] , // '\x1b[3~' ,
116 KP_ENTER: '\x1bOM' ,
117 */
118
119 F1: '\x1bOP' ,
120 F2: '\x1bOQ' ,
121 F3: '\x1bOR' ,
122 F4: '\x1bOS' ,
123 F5: '\x1b[15~' ,
124 F6: '\x1b[17~' ,
125 F7: '\x1b[18~' ,
126 F8: '\x1b[19~' ,
127 F9: '\x1b[20~' ,
128 F10: '\x1b[21~' ,
129 F11: '\x1b[23~' ,
130 F12: '\x1b[24~' ,
131
132 SHIFT_F1: '\x1bO1;2P' ,
133 SHIFT_F2: '\x1bO1;2Q' ,
134 SHIFT_F3: '\x1bO1;2R' ,
135 SHIFT_F4: '\x1bO1;2S' ,
136 SHIFT_F5: '\x1b[15;2~' ,
137 SHIFT_F6: '\x1b[17;2~' ,
138 SHIFT_F7: '\x1b[18;2~' ,
139 SHIFT_F8: '\x1b[19;2~' ,
140 SHIFT_F9: '\x1b[20;2~' ,
141 SHIFT_F10: '\x1b[21;2~' ,
142 SHIFT_F11: '\x1b[23;2~' ,
143 SHIFT_F12: '\x1b[24;2~' ,
144
145 CTRL_F1: '\x1bO1;5P' ,
146 CTRL_F2: '\x1bO1;5Q' ,
147 CTRL_F3: '\x1bO1;5R' , // '\x1b[1;5R' is also used for cursor location response... :/
148 CTRL_F4: '\x1bO1;5S' ,
149 CTRL_F5: '\x1b[15;5~' ,
150 CTRL_F6: '\x1b[17;5~' ,
151 CTRL_F7: '\x1b[18;5~' ,
152 CTRL_F8: '\x1b[19;5~' ,
153 CTRL_F9: '\x1b[20;5~' ,
154 CTRL_F10: '\x1b[21;5~' ,
155 CTRL_F11: '\x1b[23;5~' ,
156 CTRL_F12: '\x1b[24;5~' ,
157
158 CTRL_SHIFT_F1: '\x1bO1;6P' ,
159 CTRL_SHIFT_F2: '\x1bO1;6Q' ,
160 CTRL_SHIFT_F3: '\x1bO1;6R' ,
161 CTRL_SHIFT_F4: '\x1bO1;6S' ,
162 CTRL_SHIFT_F5: '\x1b[15;6~' ,
163 CTRL_SHIFT_F6: '\x1b[17;6~' ,
164 CTRL_SHIFT_F7: '\x1b[18;6~' ,
165 CTRL_SHIFT_F8: '\x1b[19;6~' ,
166 CTRL_SHIFT_F9: '\x1b[20;6~' ,
167 CTRL_SHIFT_F10: '\x1b[21;6~' ,
168 CTRL_SHIFT_F11: '\x1b[23;6~' ,
169 CTRL_SHIFT_F12: '\x1b[24;6~' ,
170
171 NUL: '\x00' ,
172
173 //CTRL_SPACE: '\x00' , // also NUL
174 ALT_SPACE: '\x1b ' ,
175 CTRL_ALT_SPACE: '\x1b\x00'
176} ;
177
178
179
180// Complete with Modifier + [A-Z]
181for ( let i = 1 ; i <= 26 ; i ++ ) {
182 exports.specialKeys[ 'CTRL_' + String.fromCharCode( 64 + i ) ] = String.fromCharCode( i ) ;
183 exports.specialKeys[ 'ALT_' + String.fromCharCode( 64 + i ) ] = '\x1b' + String.fromCharCode( 96 + i ) ;
184 exports.specialKeys[ 'CTRL_ALT_' + String.fromCharCode( 64 + i ) ] = '\x1b' + String.fromCharCode( i ) ;
185 exports.specialKeys[ 'ALT_SHIFT_' + String.fromCharCode( 64 + i ) ] = '\x1b' + String.fromCharCode( 64 + i ) ;
186}
187
188
189
190exports.reports = {
191 cursorLocation: '\x1b[%+1u;%-1uR' ,
192 cursorLocationDecVariant: '\x1b[?%+1u;%-1uR' ,
193 screenSize: '\x1b[8;%+1u;%-1ut' ,
194 focusIn: '\x1b[I' ,
195 focusOut: '\x1b[O' ,
196 registerColor: '\x1b]4;%u;rgb:%x/%x/%x\x07' // register,r,g,b
197} ;
198