]>
git.proxmox.com Git - mirror_novnc.git/blob - core/input/domkeytable.js
2 * noVNC: HTML5 VNC client
3 * Copyright (C) 2018 The noVNC Authors
4 * Licensed under MPL 2.0 or any later version (see LICENSE.txt)
7 import KeyTable
from "./keysym.js";
10 * Mapping between HTML key values and VNC/X11 keysyms for "special"
11 * keys that cannot be handled via their Unicode codepoint.
13 * See https://www.w3.org/TR/uievents-key/ for possible values.
16 const DOMKeyTable
= {};
18 function addStandard(key
, standard
) {
19 if (standard
=== undefined) throw new Error("Undefined keysym for key \"" + key
+ "\"");
20 if (key
in DOMKeyTable
) throw new Error("Duplicate entry for key \"" + key
+ "\"");
21 DOMKeyTable
[key
] = [standard
, standard
, standard
, standard
];
24 function addLeftRight(key
, left
, right
) {
25 if (left
=== undefined) throw new Error("Undefined keysym for key \"" + key
+ "\"");
26 if (right
=== undefined) throw new Error("Undefined keysym for key \"" + key
+ "\"");
27 if (key
in DOMKeyTable
) throw new Error("Duplicate entry for key \"" + key
+ "\"");
28 DOMKeyTable
[key
] = [left
, left
, right
, left
];
31 function addNumpad(key
, standard
, numpad
) {
32 if (standard
=== undefined) throw new Error("Undefined keysym for key \"" + key
+ "\"");
33 if (numpad
=== undefined) throw new Error("Undefined keysym for key \"" + key
+ "\"");
34 if (key
in DOMKeyTable
) throw new Error("Duplicate entry for key \"" + key
+ "\"");
35 DOMKeyTable
[key
] = [standard
, standard
, standard
, numpad
];
40 addLeftRight("Alt", KeyTable
.XK_Alt_L
, KeyTable
.XK_Alt_R
);
41 addStandard("AltGraph", KeyTable
.XK_ISO_Level3_Shift
);
42 addStandard("CapsLock", KeyTable
.XK_Caps_Lock
);
43 addLeftRight("Control", KeyTable
.XK_Control_L
, KeyTable
.XK_Control_R
);
46 addLeftRight("Meta", KeyTable
.XK_Super_L
, KeyTable
.XK_Super_R
);
47 addStandard("NumLock", KeyTable
.XK_Num_Lock
);
48 addStandard("ScrollLock", KeyTable
.XK_Scroll_Lock
);
49 addLeftRight("Shift", KeyTable
.XK_Shift_L
, KeyTable
.XK_Shift_R
);
53 // 2.3. Whitespace Keys
55 addNumpad("Enter", KeyTable
.XK_Return
, KeyTable
.XK_KP_Enter
);
56 addStandard("Tab", KeyTable
.XK_Tab
);
57 addNumpad(" ", KeyTable
.XK_space
, KeyTable
.XK_KP_Space
);
59 // 2.4. Navigation Keys
61 addNumpad("ArrowDown", KeyTable
.XK_Down
, KeyTable
.XK_KP_Down
);
62 addNumpad("ArrowUp", KeyTable
.XK_Up
, KeyTable
.XK_KP_Up
);
63 addNumpad("ArrowLeft", KeyTable
.XK_Left
, KeyTable
.XK_KP_Left
);
64 addNumpad("ArrowRight", KeyTable
.XK_Right
, KeyTable
.XK_KP_Right
);
65 addNumpad("End", KeyTable
.XK_End
, KeyTable
.XK_KP_End
);
66 addNumpad("Home", KeyTable
.XK_Home
, KeyTable
.XK_KP_Home
);
67 addNumpad("PageDown", KeyTable
.XK_Next
, KeyTable
.XK_KP_Next
);
68 addNumpad("PageUp", KeyTable
.XK_Prior
, KeyTable
.XK_KP_Prior
);
72 addStandard("Backspace", KeyTable
.XK_BackSpace
);
73 // Browsers send "Clear" for the numpad 5 without NumLock because
74 // Windows uses VK_Clear for that key. But Unix expects KP_Begin for
76 addNumpad("Clear", KeyTable
.XK_Clear
, KeyTable
.XK_KP_Begin
);
77 addStandard("Copy", KeyTable
.XF86XK_Copy
);
79 addStandard("Cut", KeyTable
.XF86XK_Cut
);
80 addNumpad("Delete", KeyTable
.XK_Delete
, KeyTable
.XK_KP_Delete
);
83 addNumpad("Insert", KeyTable
.XK_Insert
, KeyTable
.XK_KP_Insert
);
84 addStandard("Paste", KeyTable
.XF86XK_Paste
);
85 addStandard("Redo", KeyTable
.XK_Redo
);
86 addStandard("Undo", KeyTable
.XK_Undo
);
91 // - Again (could just be XK_Redo)
93 addStandard("Cancel", KeyTable
.XK_Cancel
);
94 addStandard("ContextMenu", KeyTable
.XK_Menu
);
95 addStandard("Escape", KeyTable
.XK_Escape
);
96 addStandard("Execute", KeyTable
.XK_Execute
);
97 addStandard("Find", KeyTable
.XK_Find
);
98 addStandard("Help", KeyTable
.XK_Help
);
99 addStandard("Pause", KeyTable
.XK_Pause
);
102 addStandard("Select", KeyTable
.XK_Select
);
103 addStandard("ZoomIn", KeyTable
.XF86XK_ZoomIn
);
104 addStandard("ZoomOut", KeyTable
.XF86XK_ZoomOut
);
108 addStandard("BrightnessDown", KeyTable
.XF86XK_MonBrightnessDown
);
109 addStandard("BrightnessUp", KeyTable
.XF86XK_MonBrightnessUp
);
110 addStandard("Eject", KeyTable
.XF86XK_Eject
);
111 addStandard("LogOff", KeyTable
.XF86XK_LogOff
);
112 addStandard("Power", KeyTable
.XF86XK_PowerOff
);
113 addStandard("PowerOff", KeyTable
.XF86XK_PowerDown
);
114 addStandard("PrintScreen", KeyTable
.XK_Print
);
115 addStandard("Hibernate", KeyTable
.XF86XK_Hibernate
);
116 addStandard("Standby", KeyTable
.XF86XK_Standby
);
117 addStandard("WakeUp", KeyTable
.XF86XK_WakeUp
);
119 // 2.8. IME and Composition Keys
121 addStandard("AllCandidates", KeyTable
.XK_MultipleCandidate
);
122 addStandard("Alphanumeric", KeyTable
.XK_Eisu_toggle
);
123 addStandard("CodeInput", KeyTable
.XK_Codeinput
);
124 addStandard("Compose", KeyTable
.XK_Multi_key
);
125 addStandard("Convert", KeyTable
.XK_Henkan
);
128 addStandard("GroupFirst", KeyTable
.XK_ISO_First_Group
);
129 addStandard("GroupLast", KeyTable
.XK_ISO_Last_Group
);
130 addStandard("GroupNext", KeyTable
.XK_ISO_Next_Group
);
131 addStandard("GroupPrevious", KeyTable
.XK_ISO_Prev_Group
);
132 // - ModeChange (XK_Mode_switch is often used for AltGr)
134 addStandard("NonConvert", KeyTable
.XK_Muhenkan
);
135 addStandard("PreviousCandidate", KeyTable
.XK_PreviousCandidate
);
137 addStandard("SingleCandidate", KeyTable
.XK_SingleCandidate
);
138 addStandard("HangulMode", KeyTable
.XK_Hangul
);
139 addStandard("HanjaMode", KeyTable
.XK_Hangul_Hanja
);
140 addStandard("JunjuaMode", KeyTable
.XK_Hangul_Jeonja
);
141 addStandard("Eisu", KeyTable
.XK_Eisu_toggle
);
142 addStandard("Hankaku", KeyTable
.XK_Hankaku
);
143 addStandard("Hiragana", KeyTable
.XK_Hiragana
);
144 addStandard("HiraganaKatakana", KeyTable
.XK_Hiragana_Katakana
);
145 addStandard("KanaMode", KeyTable
.XK_Kana_Shift
); // could also be _Kana_Lock
146 addStandard("KanjiMode", KeyTable
.XK_Kanji
);
147 addStandard("Katakana", KeyTable
.XK_Katakana
);
148 addStandard("Romaji", KeyTable
.XK_Romaji
);
149 addStandard("Zenkaku", KeyTable
.XK_Zenkaku
);
150 addStandard("ZenkakuHankaku", KeyTable
.XK_Zenkaku_Hankaku
);
152 // 2.9. General-Purpose Function Keys
154 addStandard("F1", KeyTable
.XK_F1
);
155 addStandard("F2", KeyTable
.XK_F2
);
156 addStandard("F3", KeyTable
.XK_F3
);
157 addStandard("F4", KeyTable
.XK_F4
);
158 addStandard("F5", KeyTable
.XK_F5
);
159 addStandard("F6", KeyTable
.XK_F6
);
160 addStandard("F7", KeyTable
.XK_F7
);
161 addStandard("F8", KeyTable
.XK_F8
);
162 addStandard("F9", KeyTable
.XK_F9
);
163 addStandard("F10", KeyTable
.XK_F10
);
164 addStandard("F11", KeyTable
.XK_F11
);
165 addStandard("F12", KeyTable
.XK_F12
);
166 addStandard("F13", KeyTable
.XK_F13
);
167 addStandard("F14", KeyTable
.XK_F14
);
168 addStandard("F15", KeyTable
.XK_F15
);
169 addStandard("F16", KeyTable
.XK_F16
);
170 addStandard("F17", KeyTable
.XK_F17
);
171 addStandard("F18", KeyTable
.XK_F18
);
172 addStandard("F19", KeyTable
.XK_F19
);
173 addStandard("F20", KeyTable
.XK_F20
);
174 addStandard("F21", KeyTable
.XK_F21
);
175 addStandard("F22", KeyTable
.XK_F22
);
176 addStandard("F23", KeyTable
.XK_F23
);
177 addStandard("F24", KeyTable
.XK_F24
);
178 addStandard("F25", KeyTable
.XK_F25
);
179 addStandard("F26", KeyTable
.XK_F26
);
180 addStandard("F27", KeyTable
.XK_F27
);
181 addStandard("F28", KeyTable
.XK_F28
);
182 addStandard("F29", KeyTable
.XK_F29
);
183 addStandard("F30", KeyTable
.XK_F30
);
184 addStandard("F31", KeyTable
.XK_F31
);
185 addStandard("F32", KeyTable
.XK_F32
);
186 addStandard("F33", KeyTable
.XK_F33
);
187 addStandard("F34", KeyTable
.XK_F34
);
188 addStandard("F35", KeyTable
.XK_F35
);
191 // 2.10. Multimedia Keys
195 addStandard("Close", KeyTable
.XF86XK_Close
);
196 addStandard("MailForward", KeyTable
.XF86XK_MailForward
);
197 addStandard("MailReply", KeyTable
.XF86XK_Reply
);
198 addStandard("MailSend", KeyTable
.XF86XK_Send
);
200 addStandard("MediaFastForward", KeyTable
.XF86XK_AudioForward
);
201 addStandard("MediaPause", KeyTable
.XF86XK_AudioPause
);
202 addStandard("MediaPlay", KeyTable
.XF86XK_AudioPlay
);
203 addStandard("MediaRecord", KeyTable
.XF86XK_AudioRecord
);
204 addStandard("MediaRewind", KeyTable
.XF86XK_AudioRewind
);
205 addStandard("MediaStop", KeyTable
.XF86XK_AudioStop
);
206 addStandard("MediaTrackNext", KeyTable
.XF86XK_AudioNext
);
207 addStandard("MediaTrackPrevious", KeyTable
.XF86XK_AudioPrev
);
208 addStandard("New", KeyTable
.XF86XK_New
);
209 addStandard("Open", KeyTable
.XF86XK_Open
);
210 addStandard("Print", KeyTable
.XK_Print
);
211 addStandard("Save", KeyTable
.XF86XK_Save
);
212 addStandard("SpellCheck", KeyTable
.XF86XK_Spell
);
214 // 2.11. Multimedia Numpad Keys
221 // - AudioBalanceLeft
222 // - AudioBalanceRight
223 // - AudioBassBoostDown
224 // - AudioBassBoostToggle
225 // - AudioBassBoostUp
228 // - AudioSurroundModeNext
231 addStandard("AudioVolumeDown", KeyTable
.XF86XK_AudioLowerVolume
);
232 addStandard("AudioVolumeUp", KeyTable
.XF86XK_AudioRaiseVolume
);
233 addStandard("AudioVolumeMute", KeyTable
.XF86XK_AudioMute
);
234 // - MicrophoneToggle
235 // - MicrophoneVolumeDown
236 // - MicrophoneVolumeUp
237 addStandard("MicrophoneVolumeMute", KeyTable
.XF86XK_AudioMicMute
);
241 // - SpeechCorrectionList
242 // - SpeechInputToggle
244 // 2.14. Application Keys
246 addStandard("LaunchApplication1", KeyTable
.XF86XK_MyComputer
);
247 addStandard("LaunchApplication2", KeyTable
.XF86XK_Calculator
);
248 addStandard("LaunchCalendar", KeyTable
.XF86XK_Calendar
);
249 addStandard("LaunchMail", KeyTable
.XF86XK_Mail
);
250 addStandard("LaunchMediaPlayer", KeyTable
.XF86XK_AudioMedia
);
251 addStandard("LaunchMusicPlayer", KeyTable
.XF86XK_Music
);
252 addStandard("LaunchPhone", KeyTable
.XF86XK_Phone
);
253 addStandard("LaunchScreenSaver", KeyTable
.XF86XK_ScreenSaver
);
254 addStandard("LaunchSpreadsheet", KeyTable
.XF86XK_Excel
);
255 addStandard("LaunchWebBrowser", KeyTable
.XF86XK_WWW
);
256 addStandard("LaunchWebCam", KeyTable
.XF86XK_WebCam
);
257 addStandard("LaunchWordProcessor", KeyTable
.XF86XK_Word
);
259 // 2.15. Browser Keys
261 addStandard("BrowserBack", KeyTable
.XF86XK_Back
);
262 addStandard("BrowserFavorites", KeyTable
.XF86XK_Favorites
);
263 addStandard("BrowserForward", KeyTable
.XF86XK_Forward
);
264 addStandard("BrowserHome", KeyTable
.XF86XK_HomePage
);
265 addStandard("BrowserRefresh", KeyTable
.XF86XK_Refresh
);
266 addStandard("BrowserSearch", KeyTable
.XF86XK_Search
);
267 addStandard("BrowserStop", KeyTable
.XF86XK_Stop
);
269 // 2.16. Mobile Phone Keys
271 // - A whole bunch...
275 // - A whole bunch...
277 // 2.18. Media Controller Keys
279 // - A whole bunch...
280 addStandard("Dimmer", KeyTable
.XF86XK_BrightnessAdjust
);
281 addStandard("MediaAudioTrack", KeyTable
.XF86XK_AudioCycleTrack
);
282 addStandard("RandomToggle", KeyTable
.XF86XK_AudioRandomPlay
);
283 addStandard("SplitScreenToggle", KeyTable
.XF86XK_SplitScreen
);
284 addStandard("Subtitle", KeyTable
.XF86XK_Subtitle
);
285 addStandard("VideoModeNext", KeyTable
.XF86XK_Next_VMode
);
289 addNumpad("=", KeyTable
.XK_equal
, KeyTable
.XK_KP_Equal
);
290 addNumpad("+", KeyTable
.XK_plus
, KeyTable
.XK_KP_Add
);
291 addNumpad("-", KeyTable
.XK_minus
, KeyTable
.XK_KP_Subtract
);
292 addNumpad("*", KeyTable
.XK_asterisk
, KeyTable
.XK_KP_Multiply
);
293 addNumpad("/", KeyTable
.XK_slash
, KeyTable
.XK_KP_Divide
);
294 addNumpad(".", KeyTable
.XK_period
, KeyTable
.XK_KP_Decimal
);
295 addNumpad(",", KeyTable
.XK_comma
, KeyTable
.XK_KP_Separator
);
296 addNumpad("0", KeyTable
.XK_0
, KeyTable
.XK_KP_0
);
297 addNumpad("1", KeyTable
.XK_1
, KeyTable
.XK_KP_1
);
298 addNumpad("2", KeyTable
.XK_2
, KeyTable
.XK_KP_2
);
299 addNumpad("3", KeyTable
.XK_3
, KeyTable
.XK_KP_3
);
300 addNumpad("4", KeyTable
.XK_4
, KeyTable
.XK_KP_4
);
301 addNumpad("5", KeyTable
.XK_5
, KeyTable
.XK_KP_5
);
302 addNumpad("6", KeyTable
.XK_6
, KeyTable
.XK_KP_6
);
303 addNumpad("7", KeyTable
.XK_7
, KeyTable
.XK_KP_7
);
304 addNumpad("8", KeyTable
.XK_8
, KeyTable
.XK_KP_8
);
305 addNumpad("9", KeyTable
.XK_9
, KeyTable
.XK_KP_9
);
307 export default DOMKeyTable
;