ShortcutKeyDefinitions.cpp (50765B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 #include "ShortcutKeys.h" 6 7 #if !defined(XP_WIN) && !defined(MOZ_WIDGET_COCOA) && \ 8 !defined(MOZ_WIDGET_GTK) && !defined(MOZ_WIDGET_ANDROID) 9 # define USE_EMACS_KEY_BINDINGS 10 #endif 11 12 /** 13 * This file defines shortcut keys for <input>, <textarea>, page navigation 14 * and HTML editor. You must write each mapping in one line and append inline 15 * comment on which platform it's mapped since this style helps you to looking 16 * for the defintion with searchfox, etc. 17 * Be aware, the commands defined in this file may not work because editor or 18 * other keyboard event listeners may handle before. 19 * Note: When you change key mappings, you need to change 20 * `test/gtest/TestShortcutKeyDefinitions.cpp` too. 21 * 22 * The latest version of the original files are: 23 * 24 * Windows: 25 * https://searchfox.org/mozilla-central/rev/fd853f4aea89186efdb368e759a71b7a90c2b89c/dom/events/win/ShortcutKeyDefinitions.cpp 26 * macOS: 27 * https://searchfox.org/mozilla-central/rev/fd853f4aea89186efdb368e759a71b7a90c2b89c/dom/events/mac/ShortcutKeyDefinitions.cpp 28 * Linux: 29 * https://searchfox.org/mozilla-central/rev/fd853f4aea89186efdb368e759a71b7a90c2b89c/dom/events/unix/ShortcutKeyDefinitions.cpp 30 * Android: 31 * https://searchfox.org/mozilla-central/rev/fd853f4aea89186efdb368e759a71b7a90c2b89c/dom/events/android/ShortcutKeyDefinitions.cpp 32 * Emacs: 33 * https://searchfox.org/mozilla-central/rev/fd853f4aea89186efdb368e759a71b7a90c2b89c/dom/events/emacs/ShortcutKeyDefinitions.cpp 34 * 35 * And common definitions except macOS: 36 * https://searchfox.org/mozilla-central/rev/fd853f4aea89186efdb368e759a71b7a90c2b89c/dom/events/ShortcutKeyDefinitionsForInputCommon.h 37 * https://searchfox.org/mozilla-central/rev/fd853f4aea89186efdb368e759a71b7a90c2b89c/dom/events/ShortcutKeyDefinitionsForTextAreaCommon.h 38 * https://searchfox.org/mozilla-central/rev/fd853f4aea89186efdb368e759a71b7a90c2b89c/dom/events/ShortcutKeyDefinitionsForEditorCommon.h 39 * 40 * And common definitions for page navigation on all platforms: 41 * https://searchfox.org/mozilla-central/rev/fd853f4aea89186efdb368e759a71b7a90c2b89c/dom/events/ShortcutKeyDefinitionsForBrowserCommon.h 42 * 43 * If you don't see shortcut key definitions here, but you see shortcut keys 44 * work on Linux or macOS, it probably comes from NativeKeyBindings under 45 * widget. 46 */ 47 48 namespace mozilla { 49 50 ShortcutKeyData ShortcutKeys::sInputHandlers[] = { 51 // clang-format off 52 /************************************************************************** 53 * Arrow keys to move caret in <input>. 54 **************************************************************************/ 55 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK) || \ 56 defined(MOZ_WIDGET_ANDROID) || defined(USE_EMACS_KEY_BINDINGS) 57 {u"keypress", u"VK_LEFT", nullptr, nullptr, u"cmd_moveLeft"}, // Win, Linux, Android, Emacs 58 {u"keypress", u"VK_RIGHT", nullptr, nullptr, u"cmd_moveRight"}, // Win, Linux, Android, Emacs 59 {u"keypress", u"VK_UP", nullptr, nullptr, u"cmd_moveUp"}, // Win, Linux, Android, Emacs 60 {u"keypress", u"VK_DOWN", nullptr, nullptr, u"cmd_moveDown"}, // Win, Linux, Android, Emacs 61 #endif // Except MOZ_WIDGET_COCOA 62 63 /************************************************************************** 64 * Arrow keys to select a char/line in <input>. 65 **************************************************************************/ 66 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK) || \ 67 defined(MOZ_WIDGET_ANDROID) || defined(USE_EMACS_KEY_BINDINGS) 68 {u"keypress", u"VK_LEFT", nullptr, u"shift", u"cmd_selectLeft"}, // Win, Linux, Android, Emacs 69 {u"keypress", u"VK_RIGHT", nullptr, u"shift", u"cmd_selectRight"}, // Win, Linux, Android, Emacs 70 {u"keypress", u"VK_UP", nullptr, u"shift", u"cmd_selectUp"}, // Win, Linux, Android, Emacs 71 {u"keypress", u"VK_DOWN", nullptr, u"shift", u"cmd_selectDown"}, // Win, Linux, Android, Emacs 72 #endif // Except MOZ_WIDGET_COCOA 73 74 /************************************************************************** 75 * Arrow keys per word in <input>. 76 **************************************************************************/ 77 #if defined(MOZ_WIDGET_ANDROID) || defined(USE_EMACS_KEY_BINDINGS) 78 {u"keypress", u"VK_LEFT", nullptr, u"control", u"cmd_wordPrevious"}, // Android, Emacs 79 {u"keypress", u"VK_RIGHT", nullptr, u"control", u"cmd_wordNext"}, // Android, Emacs 80 {u"keypress", u"VK_LEFT", nullptr, u"shift,control", u"cmd_selectWordPrevious"}, // Android, Emacs 81 {u"keypress", u"VK_RIGHT", nullptr, u"shift,control", u"cmd_selectWordNext"}, // Android, Emacs 82 #endif // MOZ_WIDGET_ANDROID || USE_EMACS_KEY_BINDINGS 83 #if defined(XP_WIN) 84 {u"keypress", u"VK_LEFT", nullptr, u"control", u"cmd_moveLeft2"}, // Win 85 {u"keypress", u"VK_RIGHT", nullptr, u"control", u"cmd_moveRight2"}, // Win 86 {u"keypress", u"VK_LEFT", nullptr, u"shift,control", u"cmd_selectLeft2"}, // Win 87 {u"keypress", u"VK_RIGHT", nullptr, u"shift,control", u"cmd_selectRight2"}, // Win 88 #endif // XP_WIN 89 90 /************************************************************************** 91 * Arrow keys per block in <input>. 92 **************************************************************************/ 93 #if defined(XP_WIN) 94 {u"keypress", u"VK_UP", nullptr, u"control", u"cmd_moveUp2"}, // Win 95 {u"keypress", u"VK_DOWN", nullptr, u"control", u"cmd_moveDown2"}, // Win 96 {u"keypress", u"VK_UP", nullptr, u"shift,control", u"cmd_selectUp2"}, // Win 97 {u"keypress", u"VK_DOWN", nullptr, u"shift,control", u"cmd_selectDown2"}, // Win 98 #endif // XP_WIN 99 100 /************************************************************************** 101 * Arrow keys to begin/end of a line in <input>. 102 **************************************************************************/ 103 #if defined(MOZ_WIDGET_ANDROID) 104 {u"keypress", u"VK_LEFT", nullptr, u"alt", u"cmd_beginLine"}, // Android 105 {u"keypress", u"VK_RIGHT", nullptr, u"alt", u"cmd_endLine"}, // Android 106 {u"keypress", u"VK_LEFT", nullptr, u"shift,alt", u"cmd_selectBeginLine"}, // Android 107 {u"keypress", u"VK_RIGHT", nullptr, u"shift,alt", u"cmd_selectEndLine"}, // Android 108 #endif // MOZ_WIDGET_ANDROID 109 110 /************************************************************************** 111 * Home/End keys in <input>. 112 **************************************************************************/ 113 #if defined(XP_WIN) || defined(MOZ_WIDGET_ANDROID) ||\ 114 defined(USE_EMACS_KEY_BINDINGS) 115 {u"keypress", u"VK_HOME", nullptr, nullptr, u"cmd_beginLine"}, // Win, Android, Emacs 116 {u"keypress", u"VK_END", nullptr, nullptr, u"cmd_endLine"}, // Win, Android, Emacs 117 {u"keypress", u"VK_HOME", nullptr, u"shift", u"cmd_selectBeginLine"}, // Win, Android, Emacs 118 {u"keypress", u"VK_END", nullptr, u"shift", u"cmd_selectEndLine"}, // Win, Android, Emacs 119 #endif // XP_WIN || MOZ_WIDGET_ANDROID || USE_EMACS_KEY_BINDINGS 120 #if defined(USE_EMACS_KEY_BINDINGS) 121 {u"keypress", u"VK_HOME", nullptr, u"control", u"cmd_beginLine"}, // Emacs 122 {u"keypress", u"VK_END", nullptr, u"control", u"cmd_endLine"}, // Emacs 123 {u"keypress", u"VK_HOME", nullptr, u"control,shift", u"cmd_selectBeginLine"}, // Emacs 124 {u"keypress", u"VK_END", nullptr, u"control,shift", u"cmd_selectEndLine"}, // Emacs 125 #endif // USE_EMACS_KEY_BINDINGS 126 #if defined(XP_WIN) 127 {u"keypress", u"VK_HOME", nullptr, u"control", u"cmd_moveTop"}, // Win 128 {u"keypress", u"VK_END", nullptr, u"control", u"cmd_moveBottom"}, // Win 129 {u"keypress", u"VK_HOME", nullptr, u"shift,control", u"cmd_selectTop"}, // Win 130 {u"keypress", u"VK_END", nullptr, u"shift,control", u"cmd_selectBottom"}, // Win 131 #endif // XP_WIN 132 133 /************************************************************************** 134 * Insert key in <input>. 135 **************************************************************************/ 136 #if defined(XP_WIN) || defined(USE_EMACS_KEY_BINDINGS) 137 {u"keypress", u"VK_INSERT", nullptr, u"control", u"cmd_copy"}, // Win, Emacs 138 {u"keypress", u"VK_INSERT", nullptr, u"shift", u"cmd_paste"}, // Win, Emacs 139 #endif // XP_WIN || USE_EMACS_KEY_BINDINGS 140 141 /************************************************************************** 142 * Delete key in <input>. 143 **************************************************************************/ 144 #if defined(XP_WIN) || defined(USE_EMACS_KEY_BINDINGS) 145 {u"keypress", u"VK_DELETE", nullptr, u"shift", u"cmd_cutOrDelete"}, // Win, Emacs 146 #endif // XP_WIN || USE_EMACS_KEY_BINDINGS 147 #if defined(USE_EMACS_KEY_BINDINGS) 148 {u"keypress", u"VK_DELETE", nullptr, u"control", u"cmd_copyOrDelete"}, // Emacs 149 #endif // USE_EMACS_KEY_BINDINGS 150 #if defined(XP_WIN) || defined(MOZ_WIDGET_ANDROID) 151 {u"keypress", u"VK_DELETE", nullptr, u"control", u"cmd_deleteWordForward"}, // Win, Android 152 #endif // XP_WIN 153 #if defined(MOZ_WIDGET_ANDROID) 154 {u"keypress", u"VK_DELETE", nullptr, u"alt", u"cmd_deleteToEndOfLine"}, // Android 155 #endif // MOZ_WIDGET_ANDROID 156 157 /************************************************************************** 158 * Backspace key in <input>. 159 **************************************************************************/ 160 #if defined(XP_WIN) || defined(MOZ_WIDGET_ANDROID) ||\ 161 defined(USE_EMACS_KEY_BINDINGS) 162 {u"keypress", u"VK_BACK", nullptr, u"control", u"cmd_deleteWordBackward"}, // Win, Android, Emacs 163 #endif // XP_WIN || MOZ_WIDGET_ANDROID || USE_EMACS_KEY_BINDINGS 164 #if defined(MOZ_WIDGET_ANDROID) 165 {u"keypress", u"VK_BACK", nullptr, u"alt", u"cmd_deleteToBeginningOfLine"}, // Android 166 #endif // MOZ_WIDGET_ANDROID 167 #if defined(XP_WIN) 168 {u"keypress", u"VK_BACK", nullptr, u"alt", u"cmd_undo"}, // Win 169 {u"keypress", u"VK_BACK", nullptr, u"alt,shift", u"cmd_redo"}, // Win 170 #endif // XP_WIN 171 172 /************************************************************************** 173 * Common editor commands in <input>. 174 **************************************************************************/ 175 {u"keypress", nullptr, u"c", u"accel", u"cmd_copy"}, // Win, macOS, Linux, Android, Emacs 176 {u"keypress", nullptr, u"x", u"accel", u"cmd_cut"}, // Win, macOS, Linux, Android, Emacs 177 {u"keypress", nullptr, u"v", u"accel", u"cmd_paste"}, // Win, macOS, Linux, Android, Emacs 178 {u"keypress", nullptr, u"z", u"accel", u"cmd_undo"}, // Win, macOS, Linux, Android, Emacs 179 {u"keypress", nullptr, u"z", u"accel,shift", u"cmd_redo"}, // Win, macOS, Linux, Android, Emacs 180 181 {u"keypress", nullptr, u"v", u"accel,shift", u"cmd_paste"}, // Win, macOS, Linux, Android, Emacs 182 // Mac uses Option+Shift+Command+V for Paste and Match Style 183 #if defined(MOZ_WIDGET_COCOA) 184 {u"keypress", nullptr, u"v", u"accel,alt,shift", u"cmd_paste"}, // macOS 185 #endif // MOZ_WIDGET_COCOA 186 187 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK) ||\ 188 defined(USE_EMACS_KEY_BINDINGS) 189 {u"keypress", nullptr, u"y", u"accel", u"cmd_redo"}, // Win, Linux, Emacs 190 #endif // XP_WIN || MOZ_WIDGET_GTK || USE_EMACS_KEY_BINDINGS 191 192 #if defined(XP_WIN) || defined(MOZ_WIDGET_COCOA) || defined(MOZ_WIDGET_GTK) ||\ 193 defined(MOZ_WIDGET_ANDROID) 194 {u"keypress", nullptr, u"a", u"accel", u"cmd_selectAll"}, // Win, macOS, Linux, Android 195 #endif // XP_WIN || MOZ_WIDGET_COCOA || MOZ_WIDGET_GTK || MOZ_WIDGET_ANDROID 196 #if defined(USE_EMACS_KEY_BINDINGS) 197 {u"keypress", nullptr, u"a", u"alt", u"cmd_selectAll"}, // Emacs 198 #endif // USE_EMACS_KEY_BINDINGS 199 200 /************************************************************************** 201 * Emacs specific shortcut keys in <input>. 202 **************************************************************************/ 203 #if defined(USE_EMACS_KEY_BINDINGS) 204 {u"keypress", nullptr, u"a", u"control", u"cmd_beginLine"}, // Emacs 205 {u"keypress", nullptr, u"e", u"control", u"cmd_endLine"}, // Emacs 206 {u"keypress", nullptr, u"b", u"control", u"cmd_charPrevious"}, // Emacs 207 {u"keypress", nullptr, u"f", u"control", u"cmd_charNext"}, // Emacs 208 {u"keypress", nullptr, u"h", u"control", u"cmd_deleteCharBackward"}, // Emacs 209 {u"keypress", nullptr, u"d", u"control", u"cmd_deleteCharForward"}, // Emacs 210 {u"keypress", nullptr, u"w", u"control", u"cmd_deleteWordBackward"}, // Emacs 211 {u"keypress", nullptr, u"u", u"control", u"cmd_deleteToBeginningOfLine"}, // Emacs 212 {u"keypress", nullptr, u"k", u"control", u"cmd_deleteToEndOfLine"}, // Emacs 213 #endif // USE_EMACS_KEY_BINDINGS 214 // clang-format on 215 216 {nullptr, nullptr, nullptr, nullptr, nullptr}}; 217 218 ShortcutKeyData ShortcutKeys::sTextAreaHandlers[] = { 219 // clang-format off 220 /************************************************************************** 221 * Arrow keys to move caret in <textarea>. 222 **************************************************************************/ 223 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK) || \ 224 defined(MOZ_WIDGET_ANDROID) || defined(USE_EMACS_KEY_BINDINGS) 225 {u"keypress", u"VK_LEFT", nullptr, nullptr, u"cmd_moveLeft"}, // Win, Linux, Android, Emacs 226 {u"keypress", u"VK_RIGHT", nullptr, nullptr, u"cmd_moveRight"}, // Win, Linux, Android, Emacs 227 {u"keypress", u"VK_UP", nullptr, nullptr, u"cmd_moveUp"}, // Win, Linux, Android, Emacs 228 {u"keypress", u"VK_DOWN", nullptr, nullptr, u"cmd_moveDown"}, // Win, Linux, Android, Emacs 229 #endif // Except MOZ_WIDGET_COCOA 230 231 /************************************************************************** 232 * Arrow keys to select a char/line in <textarea>. 233 **************************************************************************/ 234 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK) || \ 235 defined(MOZ_WIDGET_ANDROID) || defined(USE_EMACS_KEY_BINDINGS) 236 {u"keypress", u"VK_LEFT", nullptr, u"shift", u"cmd_selectLeft"}, // Win, Linux, Android, Emacs 237 {u"keypress", u"VK_RIGHT", nullptr, u"shift", u"cmd_selectRight"}, // Win, Linux, Android, Emacs 238 {u"keypress", u"VK_UP", nullptr, u"shift", u"cmd_selectUp"}, // Win, Linux, Android, Emacs 239 {u"keypress", u"VK_DOWN", nullptr, u"shift", u"cmd_selectDown"}, // Win, Linux, Android, Emacs 240 #endif // Except MOZ_WIDGET_COCOA 241 242 /************************************************************************** 243 * Arrow keys per word in <textarea>. 244 **************************************************************************/ 245 #if defined(MOZ_WIDGET_ANDROID) || defined(USE_EMACS_KEY_BINDINGS) 246 {u"keypress", u"VK_LEFT", nullptr, u"control", u"cmd_wordPrevious"}, // Android, Emacs 247 {u"keypress", u"VK_RIGHT", nullptr, u"control", u"cmd_wordNext"}, // Android, Emacs 248 {u"keypress", u"VK_LEFT", nullptr, u"shift,control", u"cmd_selectWordPrevious"}, // Android, Emacs 249 {u"keypress", u"VK_RIGHT", nullptr, u"shift,control", u"cmd_selectWordNext"}, // Android, Emacs 250 #endif // MOZ_WIDGET_ANDROID || USE_EMACS_KEY_BINDINGS 251 #if defined(XP_WIN) 252 {u"keypress", u"VK_LEFT", nullptr, u"control", u"cmd_moveLeft2"}, // Win 253 {u"keypress", u"VK_RIGHT", nullptr, u"control", u"cmd_moveRight2"}, // Win 254 {u"keypress", u"VK_LEFT", nullptr, u"shift,control", u"cmd_selectLeft2"}, // Win 255 {u"keypress", u"VK_RIGHT", nullptr, u"shift,control", u"cmd_selectRight2"}, // Win 256 #endif // XP_WIN 257 258 /************************************************************************** 259 * Arrow keys per block in <textarea>. 260 **************************************************************************/ 261 #if defined(MOZ_WIDGET_ANDROID) 262 {u"keypress", u"VK_UP", nullptr, u"alt", u"cmd_moveTop"}, // Android 263 {u"keypress", u"VK_DOWN", nullptr, u"alt", u"cmd_moveBottom"}, // Android 264 {u"keypress", u"VK_UP", nullptr, u"shift,alt", u"cmd_selectTop"}, // Android 265 {u"keypress", u"VK_DOWN", nullptr, u"shift,alt", u"cmd_selectBottom"}, // Android 266 #endif // MOZ_WIDGET_ANDROID 267 #if defined(XP_WIN) 268 {u"keypress", u"VK_UP", nullptr, u"control", u"cmd_moveUp2"}, // Win 269 {u"keypress", u"VK_DOWN", nullptr, u"control", u"cmd_moveDown2"}, // Win 270 {u"keypress", u"VK_UP", nullptr, u"shift,control", u"cmd_selectUp2"}, // Win 271 {u"keypress", u"VK_DOWN", nullptr, u"shift,control", u"cmd_selectDown2"}, // Win 272 #endif // XP_WIN 273 274 /************************************************************************** 275 * Arrow keys to begin/end of a line in <textarea>. 276 **************************************************************************/ 277 #if defined(MOZ_WIDGET_ANDROID) 278 {u"keypress", u"VK_LEFT", nullptr, u"alt", u"cmd_beginLine"}, // Android 279 {u"keypress", u"VK_RIGHT", nullptr, u"alt", u"cmd_endLine"}, // Android 280 {u"keypress", u"VK_LEFT", nullptr, u"shift,alt", u"cmd_selectBeginLine"}, // Android 281 {u"keypress", u"VK_RIGHT", nullptr, u"shift,alt", u"cmd_selectEndLine"}, // Android 282 #endif // MOZ_WIDGET_ANDROID 283 284 /************************************************************************** 285 * PageUp/PageDown keys in <textarea>. 286 **************************************************************************/ 287 #if defined(XP_WIN) || defined(MOZ_WIDGET_ANDROID) ||\ 288 defined(USE_EMACS_KEY_BINDINGS) 289 {u"keypress", u"VK_PAGE_UP", nullptr, nullptr, u"cmd_movePageUp"}, // Win, Android, Emacs 290 {u"keypress", u"VK_PAGE_DOWN", nullptr, nullptr, u"cmd_movePageDown"}, // Win, Android, Emacs 291 {u"keypress", u"VK_PAGE_UP", nullptr, u"shift", u"cmd_selectPageUp"}, // Win, Android, Emacs 292 {u"keypress", u"VK_PAGE_DOWN", nullptr, u"shift", u"cmd_selectPageDown"}, // Win, Android, Emacs 293 #endif // XP_WIN || MOZ_WIDGET_ANDROID || USE_EMACS_KEY_BINDINGS 294 #if defined(MOZ_WIDGET_ANDROID) 295 {u"keypress", u"VK_PAGE_UP", nullptr, u"alt", u"cmd_moveTop"}, // Android 296 {u"keypress", u"VK_PAGE_DOWN", nullptr, u"alt", u"cmd_moveBottom"}, // Android 297 {u"keypress", u"VK_PAGE_UP", nullptr, u"shift,alt", u"cmd_selectTop"}, // Android 298 {u"keypress", u"VK_PAGE_DOWN", nullptr, u"shift,alt", u"cmd_selectBottom"}, // Android 299 #endif // MOZ_WIDGET_ANDROID 300 301 /************************************************************************** 302 * Home/End keys in <textarea>. 303 **************************************************************************/ 304 #if defined(XP_WIN) || defined(MOZ_WIDGET_ANDROID) ||\ 305 defined(USE_EMACS_KEY_BINDINGS) 306 {u"keypress", u"VK_HOME", nullptr, nullptr, u"cmd_beginLine"}, // Win, Android, Emacs 307 {u"keypress", u"VK_END", nullptr, nullptr, u"cmd_endLine"}, // Win, Android, Emacs 308 {u"keypress", u"VK_HOME", nullptr, u"shift", u"cmd_selectBeginLine"}, // Win, Android, Emacs 309 {u"keypress", u"VK_END", nullptr, u"shift", u"cmd_selectEndLine"}, // Win, Android, Emacs 310 {u"keypress", u"VK_HOME", nullptr, u"control", u"cmd_moveTop"}, // Win, Android, Emacs 311 {u"keypress", u"VK_END", nullptr, u"control", u"cmd_moveBottom"}, // Win, Android, Emacs 312 {u"keypress", u"VK_HOME", nullptr, u"shift,control", u"cmd_selectTop"}, // Win, Android, Emacs 313 {u"keypress", u"VK_END", nullptr, u"shift,control", u"cmd_selectBottom"}, // Win, Android, Emacs 314 #endif // XP_WIN || MOZ_WIDGET_ANDROID || USE_EMACS_KEY_BINDINGS 315 316 /************************************************************************** 317 * Insert key in <textarea>. 318 **************************************************************************/ 319 #if defined(XP_WIN) || defined(USE_EMACS_KEY_BINDINGS) 320 {u"keypress", u"VK_INSERT", nullptr, u"control", u"cmd_copy"}, // Win, Emacs 321 {u"keypress", u"VK_INSERT", nullptr, u"shift", u"cmd_paste"}, // Win, Emacs 322 #endif // XP_WIN || USE_EMACS_KEY_BINDINGS 323 324 {u"keypress", nullptr, u"v", u"accel,shift", u"cmd_paste"}, // Win, macOS, Linux, Android, Emacs 325 // Mac uses Option+Shift+Command+V for Paste and Match Style 326 #if defined(MOZ_WIDGET_COCOA) 327 {u"keypress", nullptr, u"v", u"accel,alt,shift", u"cmd_paste"}, // macOS 328 #endif // MOZ_WIDGET_COCOA 329 330 /************************************************************************** 331 * Delete key in <textarea>. 332 **************************************************************************/ 333 #if defined(XP_WIN) || defined(USE_EMACS_KEY_BINDINGS) 334 {u"keypress", u"VK_DELETE", nullptr, u"shift", u"cmd_cutOrDelete"}, // Win, Emacs 335 #endif // XP_WIN || USE_EMACS_KEY_BINDINGS 336 #if defined(USE_EMACS_KEY_BINDINGS) 337 {u"keypress", u"VK_DELETE", nullptr, u"control", u"cmd_copyOrDelete"}, // Emacs 338 #endif // USE_EMACS_KEY_BINDINGS 339 #if defined(XP_WIN) || defined(MOZ_WIDGET_ANDROID) 340 {u"keypress", u"VK_DELETE", nullptr, u"control", u"cmd_deleteWordForward"}, // Win, Android 341 #endif // XP_WIN || MOZ_WIDGET_ANDROID 342 #if defined(MOZ_WIDGET_ANDROID) 343 {u"keypress", u"VK_DELETE", nullptr, u"alt", u"cmd_deleteToEndOfLine"}, // Android 344 #endif // MOZ_WIDGET_ANDROID 345 346 /************************************************************************** 347 * Backspace key in <textarea>. 348 **************************************************************************/ 349 #if defined(XP_WIN) || defined(MOZ_WIDGET_ANDROID) ||\ 350 defined(USE_EMACS_KEY_BINDINGS) 351 {u"keypress", u"VK_BACK", nullptr, u"control", u"cmd_deleteWordBackward"}, // Win, Android, Emacs 352 #endif // XP_WIN || MOZ_WIDGET_ANDROID || USE_EMACS_KEY_BINDINGS 353 #if defined(MOZ_WIDGET_ANDROID) 354 {u"keypress", u"VK_BACK", nullptr, u"alt", u"cmd_deleteToBeginningOfLine"}, // Android 355 #endif // MOZ_WIDGET_ANDROID 356 #if defined(XP_WIN) 357 {u"keypress", u"VK_BACK", nullptr, u"alt", u"cmd_undo"}, // Win 358 {u"keypress", u"VK_BACK", nullptr, u"alt,shift", u"cmd_redo"}, // Win 359 #endif // XP_WIN 360 361 /************************************************************************** 362 * Common editor commands in <textarea>. 363 **************************************************************************/ 364 {u"keypress", nullptr, u"c", u"accel", u"cmd_copy"}, // Win, macOS, Linux, Android, Emacs 365 {u"keypress", nullptr, u"x", u"accel", u"cmd_cut"}, // Win, macOS, Linux, Android, Emacs 366 {u"keypress", nullptr, u"v", u"accel", u"cmd_paste"}, // Win, macOS, Linux, Android, Emacs 367 {u"keypress", nullptr, u"z", u"accel", u"cmd_undo"}, // Win, macOS, Linux, Android, Emacs 368 {u"keypress", nullptr, u"z", u"accel,shift", u"cmd_redo"}, // Win, macOS, Linux, Android, Emacs 369 370 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK) ||\ 371 defined(USE_EMACS_KEY_BINDINGS) 372 {u"keypress", nullptr, u"y", u"accel", u"cmd_redo"}, // Win, Linux, Emacs 373 #endif // XP_WIN || MOZ_WIDGET_GTK || USE_EMACS_KEY_BINDINGS 374 375 #if defined(XP_WIN) || defined(MOZ_WIDGET_COCOA) || defined(MOZ_WIDGET_GTK) ||\ 376 defined(MOZ_WIDGET_ANDROID) 377 {u"keypress", nullptr, u"a", u"accel", u"cmd_selectAll"}, // Win, macOS, Linux, Android 378 #endif // XP_WIN || MOZ_WIDGET_COCOA || MOZ_WIDGET_GTK || MOZ_WIDGET_ANDROID 379 #if defined(USE_EMACS_KEY_BINDINGS) 380 {u"keypress", nullptr, u"a", u"alt", u"cmd_selectAll"}, // Emacs 381 #endif // USE_EMACS_KEY_BINDINGS 382 383 /************************************************************************** 384 * Emacs specific shortcut keys in <textarea>. 385 **************************************************************************/ 386 #if defined(USE_EMACS_KEY_BINDINGS) 387 {u"keypress", nullptr, u"a", u"control", u"cmd_beginLine"}, // Emacs 388 {u"keypress", nullptr, u"e", u"control", u"cmd_endLine"}, // Emacs 389 {u"keypress", nullptr, u"b", u"control", u"cmd_charPrevious"}, // Emacs 390 {u"keypress", nullptr, u"f", u"control", u"cmd_charNext"}, // Emacs 391 {u"keypress", nullptr, u"h", u"control", u"cmd_deleteCharBackward"}, // Emacs 392 {u"keypress", nullptr, u"d", u"control", u"cmd_deleteCharForward"}, // Emacs 393 {u"keypress", nullptr, u"w", u"control", u"cmd_deleteWordBackward"}, // Emacs 394 {u"keypress", nullptr, u"u", u"control", u"cmd_deleteToBeginningOfLine"}, // Emacs 395 {u"keypress", nullptr, u"k", u"control", u"cmd_deleteToEndOfLine"}, // Emacs 396 {u"keypress", nullptr, u"n", u"control", u"cmd_lineNext"}, // Emacs 397 {u"keypress", nullptr, u"p", u"control", u"cmd_linePrevious"}, // Emacs 398 #endif // USE_EMACS_KEY_BINDINGS 399 // clang-format on 400 401 {nullptr, nullptr, nullptr, nullptr, nullptr}}; 402 403 ShortcutKeyData ShortcutKeys::sBrowserHandlers[] = { 404 // clang-format off 405 /************************************************************************** 406 * Arrow keys to move caret in non-editable element. 407 **************************************************************************/ 408 {u"keypress", u"VK_LEFT", nullptr, nullptr, u"cmd_moveLeft"}, // Win, macOS, Linux, Android, Emacs 409 {u"keypress", u"VK_RIGHT", nullptr, nullptr, u"cmd_moveRight"}, // Win, macOS, Linux, Android, Emacs 410 {u"keypress", u"VK_UP", nullptr, nullptr, u"cmd_moveUp"}, // Win, macOS, Linux, Android, Emacs 411 {u"keypress", u"VK_DOWN", nullptr, nullptr, u"cmd_moveDown"}, // Win, macOS, Linux, Android, Emacs 412 413 /************************************************************************** 414 * Arrow keys to select a char/line in non-editable element. 415 **************************************************************************/ 416 #if defined(XP_WIN) || defined(MOZ_WIDGET_COCOA) || defined(MOZ_WIDGET_GTK) 417 {u"keypress", u"VK_LEFT", nullptr, u"shift", u"cmd_selectLeft"}, // Win, macOS, Linux 418 {u"keypress", u"VK_RIGHT", nullptr, u"shift", u"cmd_selectRight"}, // Win, macOS, Linux 419 {u"keypress", u"VK_UP", nullptr, u"shift", u"cmd_selectUp"}, // Win, macOS, Linux 420 {u"keypress", u"VK_DOWN", nullptr, u"shift", u"cmd_selectDown"}, // Win, macOS, Linux 421 #endif // XP_WIN || MOZ_WIDGET_COCOA || MOZ_WIDGET_GTK 422 #if defined(MOZ_WIDGET_ANDROID) || defined(USE_EMACS_KEY_BINDINGS) 423 {u"keypress", u"VK_LEFT", nullptr, u"shift", u"cmd_selectCharPrevious"}, // Android, Emacs 424 {u"keypress", u"VK_RIGHT", nullptr, u"shift", u"cmd_selectCharNext"}, // Android, Emacs 425 {u"keypress", u"VK_UP", nullptr, u"shift", u"cmd_selectLinePrevious"}, // Android, Emacs 426 {u"keypress", u"VK_DOWN", nullptr, u"shift", u"cmd_selectLineNext"}, // Android, Emacs 427 #endif // MOZ_WIDGET_ANDROID || USE_EMACS_KEY_BINDINGS 428 429 /************************************************************************** 430 * Arrow keys per word in non-editable element. 431 **************************************************************************/ 432 #if defined(MOZ_WIDGET_ANDROID) || defined(USE_EMACS_KEY_BINDINGS) 433 {u"keypress", u"VK_LEFT", nullptr, u"control", u"cmd_wordPrevious"}, // Android, Emacs 434 {u"keypress", u"VK_RIGHT", nullptr, u"control", u"cmd_wordNext"}, // Android, Emacs 435 {u"keypress", u"VK_LEFT", nullptr, u"control,shift", u"cmd_selectWordPrevious"}, // Android, Emacs 436 {u"keypress", u"VK_RIGHT", nullptr, u"control,shift", u"cmd_selectWordNext"}, // Android, Emacs 437 #endif // MOZ_WIDGET_ANDROID || USE_EMACS_KEY_BINDINGS 438 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK) 439 {u"keypress", u"VK_LEFT", nullptr, u"control", u"cmd_moveLeft2"}, // Win, Linux 440 {u"keypress", u"VK_RIGHT", nullptr, u"control", u"cmd_moveRight2"}, // Win, Linux 441 {u"keypress", u"VK_LEFT", nullptr, u"control,shift", u"cmd_selectLeft2"}, // Win, Linux 442 {u"keypress", u"VK_RIGHT", nullptr, u"control,shift", u"cmd_selectRight2"}, // Win, Linux 443 #endif // XP_WIN || MOZ_WIDGET_GTK 444 #if defined(MOZ_WIDGET_COCOA) 445 {u"keypress", u"VK_LEFT", nullptr, u"alt", u"cmd_moveLeft2"}, // macOS 446 {u"keypress", u"VK_RIGHT", nullptr, u"alt", u"cmd_moveRight2"}, // macOS 447 {u"keypress", u"VK_LEFT", nullptr, u"alt,shift", u"cmd_selectLeft2"}, // macOS 448 {u"keypress", u"VK_RIGHT", nullptr, u"alt,shift", u"cmd_selectRight2"}, // macOS 449 #endif // MOZ_WIDGET_COCOA 450 451 /************************************************************************** 452 * Arrow keys per block in non-editable element. 453 **************************************************************************/ 454 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK) 455 {u"keypress", u"VK_UP", nullptr, u"control", u"cmd_moveUp2"}, // Win, Linux 456 {u"keypress", u"VK_DOWN", nullptr, u"control", u"cmd_moveDown2"}, // Win, Linux 457 {u"keypress", u"VK_UP", nullptr, u"control,shift", u"cmd_selectUp2"}, // Win, Linux 458 {u"keypress", u"VK_DOWN", nullptr, u"control,shift", u"cmd_selectDown2"}, // Win, Linux 459 #endif // XP_WIN || MOZ_WIDGET_GTK 460 #if defined(MOZ_WIDGET_COCOA) 461 {u"keypress", u"VK_UP", nullptr, u"accel", u"cmd_moveUp2"}, // macOS 462 {u"keypress", u"VK_DOWN", nullptr, u"accel", u"cmd_moveDown2"}, // macOS 463 {u"keypress", u"VK_UP", nullptr, u"alt,shift", u"cmd_selectUp2"}, // macOS 464 {u"keypress", u"VK_DOWN", nullptr, u"alt,shift", u"cmd_selectDown2"}, // macOS 465 #endif // MOZ_WIDGET_COCOA 466 #if defined(MOZ_WIDGET_ANDROID) 467 {u"keypress", u"VK_UP", nullptr, u"alt", u"cmd_moveTop"}, // Android 468 {u"keypress", u"VK_DOWN", nullptr, u"alt", u"cmd_moveBottom"}, // Android 469 {u"keypress", u"VK_UP", nullptr, u"shift,alt", u"cmd_selectTop"}, // Android 470 {u"keypress", u"VK_DOWN", nullptr, u"shift,alt", u"cmd_selectBottom"}, // Android 471 #endif // MOZ_WIDGET_ANDROID 472 473 /************************************************************************** 474 * Arrow keys to begin/end of a line in non-editable element. 475 **************************************************************************/ 476 #if defined(MOZ_WIDGET_ANDROID) 477 {u"keypress", u"VK_LEFT", nullptr, u"alt", u"cmd_beginLine"}, // Android 478 {u"keypress", u"VK_RIGHT", nullptr, u"alt", u"cmd_endLine"}, // Android 479 {u"keypress", u"VK_LEFT", nullptr, u"shift,alt", u"cmd_selectBeginLine"}, // Android 480 {u"keypress", u"VK_RIGHT", nullptr, u"shift,alt", u"cmd_selectEndLine"}, // Android 481 #endif // MOZ_WIDGET_ANDROID 482 483 /************************************************************************** 484 * PageUp/PageDown keys in non-editable element. 485 **************************************************************************/ 486 #if defined(MOZ_WIDGET_COCOA) 487 {u"keypress", u"VK_PAGE_UP", nullptr, nullptr, u"cmd_scrollPageUp"}, // macOS 488 {u"keypress", u"VK_PAGE_DOWN", nullptr, nullptr, u"cmd_scrollPageDown"}, // macOS 489 #endif // MOZ_WIDGET_COCOA 490 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK) ||\ 491 defined(MOZ_WIDGET_ANDROID) || defined(USE_EMACS_KEY_BINDINGS) 492 {u"keypress", u"VK_PAGE_UP", nullptr, nullptr, u"cmd_movePageUp"}, // Win, Linux, Android, Emacs 493 {u"keypress", u"VK_PAGE_DOWN", nullptr, nullptr, u"cmd_movePageDown"}, // Win, Linux, Android, Emacs 494 {u"keypress", u"VK_PAGE_UP", nullptr, u"shift", u"cmd_selectPageUp"}, // Win, Linux, Android, Emacs 495 {u"keypress", u"VK_PAGE_DOWN", nullptr, u"shift", u"cmd_selectPageDown"}, // Win, Linux, Android, Emacs 496 #endif // XP_WIN || MOZ_WIDGET_GTK || MOZ_WIDGET_ANDROID || USE_EMACS_KEY_BINDINGS 497 #if defined(MOZ_WIDGET_ANDROID) 498 {u"keypress", u"VK_PAGE_UP", nullptr, u"alt", u"cmd_moveTop"}, // Android 499 {u"keypress", u"VK_PAGE_DOWN", nullptr, u"alt", u"cmd_moveBottom"}, // Android 500 {u"keypress", u"VK_PAGE_UP", nullptr, u"shift,alt", u"cmd_selectTop"}, // Android 501 {u"keypress", u"VK_PAGE_DOWN", nullptr, u"shift,alt", u"cmd_selectBottom"}, // Android 502 #endif // MOZ_WIDGET_ANDROID 503 504 /************************************************************************** 505 * Home/End keys in non-editable element. 506 **************************************************************************/ 507 #if defined(MOZ_WIDGET_COCOA) 508 {u"keypress", u"VK_HOME", nullptr, nullptr, u"cmd_scrollTop"}, // macOS 509 {u"keypress", u"VK_END", nullptr, nullptr, u"cmd_scrollBottom"}, // macOS 510 #endif // MOZ_WIDGET_COCOA 511 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK) ||\ 512 defined(MOZ_WIDGET_ANDROID) || defined(USE_EMACS_KEY_BINDINGS) 513 {u"keypress", u"VK_HOME", nullptr, nullptr, u"cmd_beginLine"}, // Win, Linux, Android, Emacs 514 {u"keypress", u"VK_END", nullptr, nullptr, u"cmd_endLine"}, // Win, Linux, Android, Emacs 515 {u"keypress", u"VK_HOME", nullptr, u"shift", u"cmd_selectBeginLine"}, // Win, Linux, Android, Emacs 516 {u"keypress", u"VK_END", nullptr, u"shift", u"cmd_selectEndLine"}, // Win, Linux, Android, Emacs 517 {u"keypress", u"VK_HOME", nullptr, u"control", u"cmd_moveTop"}, // Win, Linux, Android, Emacs 518 {u"keypress", u"VK_END", nullptr, u"control", u"cmd_moveBottom"}, // Win, Linux, Android, Emacs 519 {u"keypress", u"VK_HOME", nullptr, u"shift,control", u"cmd_selectTop"}, // Win, Linux, Android, Emacs 520 {u"keypress", u"VK_END", nullptr, u"shift,control", u"cmd_selectBottom"}, // Win, Linux, Android, Emacs 521 #endif // XP_WIN || MOZ_WIDGET_GTK || MOZ_WIDGET_ANDROID || USE_EMACS_KEY_BINDINGS 522 523 /************************************************************************** 524 * Insert key in non-editable element. 525 **************************************************************************/ 526 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK) ||\ 527 defined(USE_EMACS_KEY_BINDINGS) 528 {u"keypress", u"VK_INSERT", nullptr, u"control", u"cmd_copy"}, // Win, Linux, Emacs 529 #endif // XP_WIN || MOZ_WIDGET_GTK || USE_EMACS_KEY_BINDINGS 530 531 /************************************************************************** 532 * Delete key in non-editable element. 533 **************************************************************************/ 534 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK) ||\ 535 defined(USE_EMACS_KEY_BINDINGS) 536 {u"keypress", u"VK_DELETE", nullptr, u"shift", u"cmd_cut"}, // Win, Linux, Emacs 537 #endif // XP_WIN || MOZ_WIDGET_GTK || USE_EMACS_KEY_BINDINGS 538 #if defined(MOZ_WIDGET_GTK) || defined(USE_EMACS_KEY_BINDINGS) 539 {u"keypress", u"VK_DELETE", nullptr, u"control", u"cmd_copy"}, // Linux, Emacs 540 #endif // MOZ_WIDGET_GTK || USE_EMACS_KEY_BINDINGS 541 #if defined(XP_WIN) || defined(MOZ_WIDGET_ANDROID) 542 {u"keypress", u"VK_DELETE", nullptr, u"control", u"cmd_deleteWordForward"}, // Win, Android 543 #endif // XP_WIN || MOZ_WIDGET_ANDROID 544 #if defined(MOZ_WIDGET_ANDROID) 545 {u"keypress", u"VK_DELETE", nullptr, u"alt", u"cmd_deleteToEndOfLine"}, // Android 546 #endif // MOZ_WIDGET_ANDROID 547 548 /************************************************************************** 549 * Backspace key in non-editable element. 550 **************************************************************************/ 551 #if defined(MOZ_WIDGET_ANDROID) 552 {u"keypress", u"VK_BACK", nullptr, u"alt", u"cmd_deleteToBeginningOfLine"}, // Android 553 {u"keypress", u"VK_BACK", nullptr, u"control", u"cmd_deleteWordBackward"}, // Android 554 #endif // MOZ_WIDGET_ANDROID 555 556 /************************************************************************** 557 * Common editor commands in non-editable element. 558 **************************************************************************/ 559 {u"keypress", nullptr, u"c", u"accel", u"cmd_copy"}, // Win, macOS, Linux, Android, Emacs 560 {u"keypress", nullptr, u"x", u"accel", u"cmd_cut"}, // Win, macOS, Linux, Android, Emacs 561 {u"keypress", nullptr, u"v", u"accel", u"cmd_paste"}, // Win, macOS, Linux, Android, Emacs 562 {u"keypress", nullptr, u"v", u"accel,shift", u"cmd_pasteNoFormatting"}, // Win, macOS, Linux, Android, Emacs 563 {u"keypress", nullptr, u"z", u"accel", u"cmd_undo"}, // Win, macOS, Linux, Android, Emacs 564 {u"keypress", nullptr, u"z", u"accel,shift", u"cmd_redo"}, // Win, macOS, Linux, Android, Emacs 565 566 // Mac uses Option+Shift+Command+V for Paste and Match Style 567 #if defined(MOZ_WIDGET_COCOA) 568 {u"keypress", nullptr, u"v", u"accel,alt,shift", u"cmd_pasteNoFormatting"}, // macOS 569 #endif // MOZ_WIDGET_COCOA 570 571 #if defined(XP_WIN) 572 {u"keypress", nullptr, u"y", u"accel", u"cmd_redo"}, // Win 573 #endif // XP_WIN 574 575 {u"keypress", nullptr, u"a", u"accel", u"cmd_selectAll"}, // Win, macOS, Linux, Android, Emacs 576 #if defined(USE_EMACS_KEY_BINDINGS) 577 {u"keypress", nullptr, u"a", u"alt", u"cmd_selectAll"}, // Emacs 578 #endif // USE_EMACS_KEY_BINDINGS 579 580 /************************************************************************** 581 * Space key in non-editable element. 582 **************************************************************************/ 583 {u"keypress", nullptr, u" ", nullptr, u"cmd_scrollPageDown"}, // Win, macOS, Linux, Android, Emacs 584 {u"keypress", nullptr, u" ", u"shift", u"cmd_scrollPageUp"}, // Win, macOS, Linux, Android, Emacs 585 586 587 {nullptr, nullptr, nullptr, nullptr, nullptr}}; 588 589 ShortcutKeyData ShortcutKeys::sEditorHandlers[] = { 590 // clang-format off 591 /************************************************************************** 592 * Arrow keys to move caret in HTMLEditor. 593 **************************************************************************/ 594 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK) || \ 595 defined(MOZ_WIDGET_ANDROID) || defined(USE_EMACS_KEY_BINDINGS) 596 {u"keypress", u"VK_LEFT", nullptr, nullptr, u"cmd_moveLeft"}, // Win, Linux, Android, Emacs 597 {u"keypress", u"VK_RIGHT", nullptr, nullptr, u"cmd_moveRight"}, // Win, Linux, Android, Emacs 598 {u"keypress", u"VK_UP", nullptr, nullptr, u"cmd_moveUp"}, // Win, Linux, Android, Emacs 599 {u"keypress", u"VK_DOWN", nullptr, nullptr, u"cmd_moveDown"}, // Win, Linux, Android, Emacs 600 #endif // Except MOZ_WIDGET_COCOA 601 602 /************************************************************************** 603 * Arrow keys to select a char/line in HTMLEditor. 604 **************************************************************************/ 605 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK) || \ 606 defined(MOZ_WIDGET_ANDROID) || defined(USE_EMACS_KEY_BINDINGS) 607 {u"keypress", u"VK_LEFT", nullptr, u"shift", u"cmd_selectLeft"}, // Win, Linux, Android, Emacs 608 {u"keypress", u"VK_RIGHT", nullptr, u"shift", u"cmd_selectRight"}, // Win, Linux, Android, Emacs 609 {u"keypress", u"VK_UP", nullptr, u"shift", u"cmd_selectUp"}, // Win, Linux, Android, Emacs 610 {u"keypress", u"VK_DOWN", nullptr, u"shift", u"cmd_selectDown"}, // Win, Linux, Android, Emacs 611 #endif // Except MOZ_WIDGET_COCOA 612 613 /************************************************************************** 614 * Arrow keys per word in HTMLEditor. 615 **************************************************************************/ 616 #if defined(MOZ_WIDGET_ANDROID) || defined(USE_EMACS_KEY_BINDINGS) 617 {u"keypress", u"VK_LEFT", nullptr, u"control", u"cmd_wordPrevious"}, // Android, Emacs 618 {u"keypress", u"VK_RIGHT", nullptr, u"control", u"cmd_wordNext"}, // Android, Emacs 619 {u"keypress", u"VK_LEFT", nullptr, u"shift,control", u"cmd_selectWordPrevious"}, // Android, Emacs 620 {u"keypress", u"VK_RIGHT", nullptr, u"shift,control", u"cmd_selectWordNext"}, // Android, Emacs 621 #endif // MOZ_WIDGET_ANDROID || USE_EMACS_KEY_BINDINGS 622 #if defined(XP_WIN) 623 {u"keypress", u"VK_LEFT", nullptr, u"accel", u"cmd_moveLeft2"}, // Win 624 {u"keypress", u"VK_RIGHT", nullptr, u"accel", u"cmd_moveRight2"}, // Win 625 {u"keypress", u"VK_LEFT", nullptr, u"shift,accel", u"cmd_selectLeft2"}, // Win 626 {u"keypress", u"VK_RIGHT", nullptr, u"shift,accel", u"cmd_selectRight2"}, // Win 627 #endif // XP_WIN 628 629 /************************************************************************** 630 * Arrow keys per block in HTMLEditor. 631 **************************************************************************/ 632 #if defined(MOZ_WIDGET_ANDROID) 633 {u"keypress", u"VK_UP", nullptr, u"alt", u"cmd_moveTop"}, // Android 634 {u"keypress", u"VK_DOWN", nullptr, u"alt", u"cmd_moveBottom"}, // Android 635 {u"keypress", u"VK_UP", nullptr, u"shift,alt", u"cmd_selectTop"}, // Android 636 {u"keypress", u"VK_DOWN", nullptr, u"shift,alt", u"cmd_selectBottom"}, // Android 637 #endif // MOZ_WIDGET_ANDROID 638 #if defined(XP_WIN) 639 {u"keypress", u"VK_UP", nullptr, u"accel", u"cmd_moveUp2"}, // Win 640 {u"keypress", u"VK_DOWN", nullptr, u"accel", u"cmd_moveDown2"}, // Win 641 {u"keypress", u"VK_UP", nullptr, u"shift,accel", u"cmd_selectUp2"}, // Win 642 {u"keypress", u"VK_DOWN", nullptr, u"shift,accel", u"cmd_selectDown2"}, // Win 643 #endif // XP_WIN 644 645 /************************************************************************** 646 * Arrow keys to begin/end of a line in HTMLEditor. 647 **************************************************************************/ 648 #if defined(MOZ_WIDGET_ANDROID) 649 {u"keypress", u"VK_LEFT", nullptr, u"alt", u"cmd_beginLine"}, // Android 650 {u"keypress", u"VK_RIGHT", nullptr, u"alt", u"cmd_endLine"}, // Android 651 {u"keypress", u"VK_LEFT", nullptr, u"shift,alt", u"cmd_selectBeginLine"}, // Android 652 {u"keypress", u"VK_RIGHT", nullptr, u"shift,alt", u"cmd_selectEndLine"}, // Android 653 #endif // MOZ_WIDGET_ANDROID 654 655 /************************************************************************** 656 * PageUp/PageDown keys in HTMLEditor. 657 **************************************************************************/ 658 #if defined(XP_WIN) || defined(MOZ_WIDGET_ANDROID) ||\ 659 defined(USE_EMACS_KEY_BINDINGS) 660 {u"keypress", u"VK_PAGE_UP", nullptr, nullptr, u"cmd_movePageUp"}, // Win, Android, Emacs 661 {u"keypress", u"VK_PAGE_DOWN", nullptr, nullptr, u"cmd_movePageDown"}, // Win, Android, Emacs 662 {u"keypress", u"VK_PAGE_UP", nullptr, u"shift", u"cmd_selectPageUp"}, // Win, Android, Emacs 663 {u"keypress", u"VK_PAGE_DOWN", nullptr, u"shift", u"cmd_selectPageDown"}, // Win, Android, Emacs 664 #endif // XP_WIN || MOZ_WIDGET_ANDROID || USE_EMACS_KEY_BINDINGS 665 #if defined(MOZ_WIDGET_ANDROID) 666 {u"keypress", u"VK_PAGE_UP", nullptr, u"alt", u"cmd_moveTop"}, // Android 667 {u"keypress", u"VK_PAGE_DOWN", nullptr, u"alt", u"cmd_moveBottom"}, // Android 668 {u"keypress", u"VK_PAGE_UP", nullptr, u"shift,alt", u"cmd_selectTop"}, // Android 669 {u"keypress", u"VK_PAGE_DOWN", nullptr, u"shift,alt", u"cmd_selectBottom"}, // Android 670 #endif // MOZ_WIDGET_ANDROID 671 672 /************************************************************************** 673 * Home/End keys in HTMLEditor. 674 **************************************************************************/ 675 #if defined(XP_WIN) || defined(MOZ_WIDGET_ANDROID) ||\ 676 defined(USE_EMACS_KEY_BINDINGS) 677 {u"keypress", u"VK_HOME", nullptr, nullptr, u"cmd_beginLine"}, // Win, Android, Emacs 678 {u"keypress", u"VK_END", nullptr, nullptr, u"cmd_endLine"}, // Win, Android, Emacs 679 {u"keypress", u"VK_HOME", nullptr, u"shift", u"cmd_selectBeginLine"}, // Win, Android, Emacs 680 {u"keypress", u"VK_END", nullptr, u"shift", u"cmd_selectEndLine"}, // Win, Android, Emacs 681 {u"keypress", u"VK_HOME", nullptr, u"control", u"cmd_moveTop"}, // Win, Android, Emacs 682 {u"keypress", u"VK_END", nullptr, u"control", u"cmd_moveBottom"}, // Win, Android, Emacs 683 {u"keypress", u"VK_HOME", nullptr, u"shift,control", u"cmd_selectTop"}, // Win, Android, Emacs 684 {u"keypress", u"VK_END", nullptr, u"shift,control", u"cmd_selectBottom"}, // Win, Android, Emacs 685 #endif // XP_WIN || MOZ_WIDGET_ANDROID || USE_EMACS_KEY_BINDINGS 686 687 /************************************************************************** 688 * Insert key in HTMLEditor. 689 **************************************************************************/ 690 #if defined(XP_WIN) || defined(USE_EMACS_KEY_BINDINGS) 691 {u"keypress", u"VK_INSERT", nullptr, u"control", u"cmd_copy"}, // Win, Emacs 692 {u"keypress", u"VK_INSERT", nullptr, u"shift", u"cmd_paste"}, // Win, Emacs 693 #endif // XP_WIN || USE_EMACS_KEY_BINDINGS 694 695 /************************************************************************** 696 * Delete key in HTMLEditor. 697 **************************************************************************/ 698 #if defined(XP_WIN) || defined(USE_EMACS_KEY_BINDINGS) 699 {u"keypress", u"VK_DELETE", nullptr, u"shift", u"cmd_cutOrDelete"}, // Win, Emacs 700 #endif // XP_WIN || USE_EMACS_KEY_BINDINGS 701 #if defined(USE_EMACS_KEY_BINDINGS) 702 {u"keypress", u"VK_DELETE", nullptr, u"control", u"cmd_copyOrDelete"}, // Emacs 703 #endif // USE_EMACS_KEY_BINDINGS 704 #if defined(XP_WIN) || defined(MOZ_WIDGET_ANDROID) 705 {u"keypress", u"VK_DELETE", nullptr, u"control", u"cmd_deleteWordForward"}, // Win, Android 706 #endif // XP_WIN || MOZ_WIDGET_ANDROID 707 #if defined(MOZ_WIDGET_ANDROID) 708 {u"keypress", u"VK_DELETE", nullptr, u"alt", u"cmd_deleteToEndOfLine"}, // Android 709 #endif // MOZ_WIDGET_ANDROID 710 711 /************************************************************************** 712 * Backspace key in HTMLEditor. 713 **************************************************************************/ 714 #if defined(XP_WIN) || defined(MOZ_WIDGET_ANDROID) || defined(USE_EMACS_KEY_BINDINGS) 715 {u"keypress", u"VK_BACK", nullptr, u"control", u"cmd_deleteWordBackward"}, // Win, Android, Emacs 716 #endif // XP_WIN || MOZ_WIDGET_ANDROID || USE_EMACS_KEY_BINDINGS 717 #if defined(MOZ_WIDGET_ANDROID) 718 {u"keypress", u"VK_BACK", nullptr, u"alt", u"cmd_deleteToBeginningOfLine"}, // Android 719 #endif // MOZ_WIDGET_ANDROID 720 #if defined(XP_WIN) 721 {u"keypress", u"VK_BACK", nullptr, u"alt", u"cmd_undo"}, // Win 722 {u"keypress", u"VK_BACK", nullptr, u"alt,shift", u"cmd_redo"}, // Win 723 #endif // XP_WIN 724 725 /************************************************************************** 726 * Common editor commands in HTMLEditor. 727 **************************************************************************/ 728 {u"keypress", nullptr, u"c", u"accel", u"cmd_copy"}, // Win, macOS, Linux, Android, Emacs 729 {u"keypress", nullptr, u"x", u"accel", u"cmd_cut"}, // Win, macOS, Linux, Android, Emacs 730 {u"keypress", nullptr, u"v", u"accel", u"cmd_paste"}, // Win, macOS, Linux, Android, Emacs 731 {u"keypress", nullptr, u"v", u"accel,shift", u"cmd_pasteNoFormatting"}, // Win, macOS, Linux, Android, Emacs 732 {u"keypress", nullptr, u"z", u"accel", u"cmd_undo"}, // Win, macOS, Linux, Android, Emacs 733 {u"keypress", nullptr, u"z", u"accel,shift", u"cmd_redo"}, // Win, macOS, Linux, Android, Emacs 734 735 // Mac uses Option+Shift+Command+V for Paste and Match Style 736 #if defined(MOZ_WIDGET_COCOA) 737 {u"keypress", nullptr, u"v", u"accel,alt,shift", u"cmd_pasteNoFormatting"}, // macOS 738 #endif // MOZ_WIDGET_COCOA 739 740 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK) ||\ 741 defined(USE_EMACS_KEY_BINDINGS) 742 {u"keypress", nullptr, u"y", u"accel", u"cmd_redo"}, // Emacs 743 #endif // XP_WIN || MOZ_WIDGET_GTK || USE_EMACS_KEY_BINDINGS 744 745 #if defined(XP_WIN) || defined(MOZ_WIDGET_COCOA) || defined(MOZ_WIDGET_GTK) ||\ 746 defined(MOZ_WIDGET_ANDROID) 747 {u"keypress", nullptr, u"a", u"accel", u"cmd_selectAll"}, // Win, macOS, Linux, Android 748 #endif // XP_WIN || MOZ_WIDGET_COCOA || MOZ_WIDGET_GTK || MOZ_WIDGET_ANDROID 749 #if defined(USE_EMACS_KEY_BINDINGS) 750 {u"keypress", nullptr, u"a", u"alt", u"cmd_selectAll"}, // Emacs 751 #endif // USE_EMACS_KEY_BINDINGS 752 753 /************************************************************************** 754 * Space key in HTMLEditor. 755 **************************************************************************/ 756 {u"keypress", nullptr, u" ", nullptr, u"cmd_scrollPageDown"}, // Win, macOS, Linux, Android, Emacs 757 {u"keypress", nullptr, u" ", u"shift", u"cmd_scrollPageUp"}, // Win, macOS, Linux, Android, Emacs 758 759 /************************************************************************** 760 * Emacs specific shortcut keys in HTMLEditor. 761 **************************************************************************/ 762 #if defined(USE_EMACS_KEY_BINDINGS) 763 {u"keypress", nullptr, u"h", u"control", u"cmd_deleteCharBackward"}, // Emacs 764 {u"keypress", nullptr, u"d", u"control", u"cmd_deleteCharForward"}, // Emacs 765 {u"keypress", nullptr, u"k", u"control", u"cmd_deleteToEndOfLine"}, // Emacs 766 {u"keypress", nullptr, u"u", u"control", u"cmd_deleteToBeginningOfLine"}, // Emacs 767 {u"keypress", nullptr, u"a", u"control", u"cmd_beginLine"}, // Emacs 768 {u"keypress", nullptr, u"e", u"control", u"cmd_endLine"}, // Emacs 769 {u"keypress", nullptr, u"b", u"control", u"cmd_charPrevious"}, // Emacs 770 {u"keypress", nullptr, u"f", u"control", u"cmd_charNext"}, // Emacs 771 {u"keypress", nullptr, u"p", u"control", u"cmd_linePrevious"}, // Emacs 772 {u"keypress", nullptr, u"n", u"control", u"cmd_lineNext"}, // Emacs 773 #endif // USE_EMACS_KEY_BINDINGS 774 // clang-format on 775 776 {nullptr, nullptr, nullptr, nullptr, nullptr}}; 777 778 } // namespace mozilla 779 780 #undef USE_EMACS_KEY_BINDINGS