WebKit Bugzilla
Attachment 360188 Details for
Bug 193452
: [iOS] Make Windows virtual key code computation match Mac
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
To Land
bug-193452-20190125163955.patch (text/plain), 126.16 KB, created by
Daniel Bates
on 2019-01-25 16:39:56 PST
(
hide
)
Description:
To Land
Filename:
MIME Type:
Creator:
Daniel Bates
Created:
2019-01-25 16:39:56 PST
Size:
126.16 KB
patch
obsolete
>Subversion Revision: 240438 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 9ffdb2b9ed9add705fa5aa5c33113934b501e023..d60b3397c9bc8f3b5651e0dcaac010ba5cbccdae 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,23 @@ >+2019-01-25 Daniel Bates <dabates@apple.com> >+ >+ [iOS] Make Window virtual key code computation match Mac >+ https://bugs.webkit.org/show_bug.cgi?id=193452 >+ >+ Reviewed by Ryosuke Niwa. >+ >+ Use the same approach for computing the Windows virtual key code on iOS as we do on Mac for >+ web compatibility. On Mac, we prefer to compute the Windows virtual key code from the input >+ strings of the key event and use the key event's keycode as a last resort. >+ >+ Test: fast/events/ios/key-events-meta-alt-combinations.html >+ >+ * platform/ios/PlatformEventFactoryIOS.h: >+ * platform/ios/PlatformEventFactoryIOS.mm: >+ (WebCore::isKeypadEvent): Added. >+ (WebCore::windowsKeyCodeForKeyEvent): Added. >+ (WebCore::PlatformKeyboardEventBuilder::PlatformKeyboardEventBuilder): Modified to call >+ WebCore::windowsKeyCodeForKeyEvent() to compute the Windows virtual key code. >+ > 2019-01-23 Daniel Bates <dabates@apple.com> > > [iOS] Keyups for non-modifier keys identified as "Dead" when not focused in a content-editable element >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index fc997397231ccf85d502ab75c4261826330eba97..914422d6d59711f02b391e693e503881d0cb44b6 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,15 @@ >+2019-01-25 Daniel Bates <dabates@apple.com> >+ >+ [iOS] Make Window virtual key code computation match Mac >+ https://bugs.webkit.org/show_bug.cgi?id=193452 >+ >+ Reviewed by Ryosuke Niwa. >+ >+ Compute the Windows virtual key code from the WebEvent. >+ >+ * Shared/ios/WebIOSEventFactory.mm: >+ (WebIOSEventFactory::createWebKeyboardEvent): >+ > 2019-01-23 Daniel Bates <dabates@apple.com> > > [iOS] Keyups for non-modifier keys identified as "Dead" when not focused in a content-editable element >diff --git a/Source/WebCore/platform/ios/PlatformEventFactoryIOS.h b/Source/WebCore/platform/ios/PlatformEventFactoryIOS.h >index 063cdb4a8b37e949692b42e333b4267876390b48..5d557873968a6c93158764a1c8932497831cf2eb 100644 >--- a/Source/WebCore/platform/ios/PlatformEventFactoryIOS.h >+++ b/Source/WebCore/platform/ios/PlatformEventFactoryIOS.h >@@ -53,6 +53,7 @@ public: > WEBCORE_EXPORT String keyForKeyEvent(WebEvent *); > WEBCORE_EXPORT String codeForKeyEvent(WebEvent *); > WEBCORE_EXPORT String keyIdentifierForKeyEvent(WebEvent *); >+WEBCORE_EXPORT int windowsKeyCodeForKeyEvent(WebEvent*); > > } // namespace WebCore > >diff --git a/Source/WebCore/platform/ios/PlatformEventFactoryIOS.mm b/Source/WebCore/platform/ios/PlatformEventFactoryIOS.mm >index a9e716ac713ff49b313759c90e37b09d98485248..319c606ee5100d7fd1fea5659654fcda3042a688 100644 >--- a/Source/WebCore/platform/ios/PlatformEventFactoryIOS.mm >+++ b/Source/WebCore/platform/ios/PlatformEventFactoryIOS.mm >@@ -1,5 +1,5 @@ > /* >- * Copyright (C) 2004, 2006, 2007, 2008, 2009, 2010, 2011, 2014 Apple Inc. All rights reserved. >+ * Copyright (C) 2004, 2006-2011, 2014, 2019 Apple Inc. All rights reserved. > * > * Redistribution and use in source and binary forms, with or without > * modification, are permitted provided that the following conditions >@@ -420,6 +420,74 @@ String codeForKeyEvent(WebEvent *event) > } > } > >+static bool isKeypadEvent(WebEvent* event) >+{ >+ // Check that this is the type of event that has a keyCode. >+ switch (event.type) { >+ case WebEventKeyDown: >+ case WebEventKeyUp: >+ break; >+ default: >+ return false; >+ } >+ >+ // With the exception of keypad comma, the following corresponds to the criterion for UIKeyModifierNumericPad. >+ // FIXME: Recognize keypad comma. >+ switch (event.keyCode) { >+ case VK_CLEAR: // Num Pad Clear >+ case VK_OEM_PLUS: // Num Pad = >+ case VK_DIVIDE: >+ case VK_MULTIPLY: >+ case VK_SUBTRACT: >+ case VK_ADD: >+ case VK_RETURN: // Num Pad Enter >+ case VK_DECIMAL: // Num Pad . >+ case VK_NUMPAD0: >+ case VK_NUMPAD1: >+ case VK_NUMPAD2: >+ case VK_NUMPAD3: >+ case VK_NUMPAD4: >+ case VK_NUMPAD5: >+ case VK_NUMPAD6: >+ case VK_NUMPAD7: >+ case VK_NUMPAD8: >+ case VK_NUMPAD9: >+ return true; >+ } >+ return false; >+} >+ >+int windowsKeyCodeForKeyEvent(WebEvent* event) >+{ >+ if (event.keyboardFlags & WebEventKeyboardInputModifierFlagsChanged) >+ return event.keyCode; >+ >+ // There are several kinds of characters for which we produce key code from char code: >+ // 1. Roman letters. Windows keyboard layouts affect both virtual key codes and character codes for these, >+ // so e.g. 'A' gets the same keyCode on QWERTY, AZERTY or Dvorak layouts. >+ // 2. Keys for which there is no known iOS virtual key codes, like PrintScreen. >+ // 3. Certain punctuation keys. On Windows, these are also remapped depending on current keyboard layout, >+ // but see comment in windowsKeyCodeForCharCode(). >+ if (!isKeypadEvent(event) && (event.type == WebEventKeyDown || event.type == WebEventKeyUp)) { >+ // Cmd switches Roman letters for Dvorak-QWERTY layout, so try modified characters first. >+ NSString *string = event.characters; >+ int code = string.length > 0 ? windowsKeyCodeForCharCode([string characterAtIndex:0]) : 0; >+ if (code) >+ return code; >+ >+ // Ctrl+A on an AZERTY keyboard would get VK_Q keyCode if we relied on -[WebEvent keyCode] below. >+ string = event.charactersIgnoringModifiers; >+ code = string.length > 0 ? windowsKeyCodeForCharCode([string characterAtIndex:0]) : 0; >+ if (code) >+ return code; >+ } >+ >+ // Use iOS virtual key code directly for any keys not handled above. >+ // E.g. the key next to Caps Lock has the same Event.keyCode on U.S. keyboard ('A') and on >+ // Russian keyboard (CYRILLIC LETTER EF). >+ return event.keyCode; >+} >+ > class PlatformKeyboardEventBuilder : public PlatformKeyboardEvent { > public: > PlatformKeyboardEventBuilder(WebEvent *event) >@@ -442,7 +510,7 @@ public: > m_key = keyForKeyEvent(event); > m_code = codeForKeyEvent(event); > m_keyIdentifier = keyIdentifierForKeyEvent(event); >- m_windowsVirtualKeyCode = event.keyCode; >+ m_windowsVirtualKeyCode = windowsKeyCodeForKeyEvent(event); > m_isKeypad = false; // iOS does not distinguish the numpad. See <rdar://problem/7190835>. > m_isSystemKey = false; > m_Event = event; >diff --git a/Source/WebKit/Shared/ios/WebIOSEventFactory.mm b/Source/WebKit/Shared/ios/WebIOSEventFactory.mm >index ef3eac31628e8ebb90ef3eb94fa63ad28cd14911..4a9584e45bdea8c878b7fb57d1f3e1a559e411f6 100644 >--- a/Source/WebKit/Shared/ios/WebIOSEventFactory.mm >+++ b/Source/WebKit/Shared/ios/WebIOSEventFactory.mm >@@ -68,7 +68,7 @@ WebKit::WebKeyboardEvent WebIOSEventFactory::createWebKeyboardEvent(::WebEvent * > String key = WebCore::keyForKeyEvent(event); > String code = WebCore::codeForKeyEvent(event); > String keyIdentifier = WebCore::keyIdentifierForKeyEvent(event); >- int windowsVirtualKeyCode = event.keyCode; >+ int windowsVirtualKeyCode = WebCore::windowsKeyCodeForKeyEvent(event); > // FIXME: This is not correct. WebEvent.keyCode represents the Windows native virtual key code. > int nativeVirtualKeyCode = event.keyCode; > int macCharCode = 0; >diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog >index 15d489d60b2ff5c158abb839aa7b2110fe85d08f..89eaf63e77c3fe4e84f4bcbdcff188b19b652ae6 100644 >--- a/LayoutTests/ChangeLog >+++ b/LayoutTests/ChangeLog >@@ -1,3 +1,32 @@ >+2019-01-25 Daniel Bates <dabates@apple.com> >+ >+ [iOS] Make Window virtual key code computation match Mac >+ https://bugs.webkit.org/show_bug.cgi?id=193452 >+ >+ Reviewed by Ryosuke Niwa. >+ >+ Add a test that ensures we do not regress DOM key events dispatches for combinations >+ of Option and Command + Option key commands. >+ >+ * fast/events/ios/key-events-meta-alt-combinations-expected.txt: Added. >+ * fast/events/ios/key-events-meta-alt-combinations.html: Added. >+ * fast/events/ios/resources/key-tester.js: Added. >+ (computeDifference): >+ (areArraysEqual): >+ (areKeyCommandsEqual): >+ (KeyCommand): >+ (KeyCommand.prototype.toString): >+ (keyCommandsHasCommand): >+ (computeSubsets.compareByModifierOrder): >+ (handleKeyUp): >+ (handleKeyPress): >+ (log): >+ (logKeyEvent): >+ (displayNameForTest): >+ (nextKeyPress): >+ (runTest): >+ (setUp): >+ > 2019-01-15 Daniel Bates <dabates@apple.com> > > [iOS] uiController.keyDown() does not translate Control modified key >diff --git a/LayoutTests/fast/events/ios/key-events-meta-alt-combinations-expected.txt b/LayoutTests/fast/events/ios/key-events-meta-alt-combinations-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..2460208c86944394da67b6e948dfa07470ce3240 >--- /dev/null >+++ b/LayoutTests/fast/events/ios/key-events-meta-alt-combinations-expected.txt >@@ -0,0 +1,746 @@ >+This logs DOM keydown, keyup, keypress events that are dispatched when pressing key commands of the form Command + X, Option + X and Command + Option + X. Must be run in WebKitTestRunner. >+ >+ >+Test Command + a: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: a, code: KeyA, keyIdentifier: U+0041, keyCode: 65, charCode: 0, keyCode: 65, which: 65, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + a: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Ã¥, code: KeyA, keyIdentifier: U+0041, keyCode: 65, charCode: 0, keyCode: 65, which: 65, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: Ã¥, code: KeyA, keyIdentifier: , keyCode: 229, charCode: 229, keyCode: 229, which: 229, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Ã¥, code: KeyA, keyIdentifier: U+0041, keyCode: 65, charCode: 0, keyCode: 65, which: 65, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + Option + a: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Ã¥, code: KeyA, keyIdentifier: U+0041, keyCode: 65, charCode: 0, keyCode: 65, which: 65, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: Ã¥, code: KeyA, keyIdentifier: , keyCode: 229, charCode: 229, keyCode: 229, which: 229, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + b: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: b, code: KeyB, keyIdentifier: U+0042, keyCode: 66, charCode: 0, keyCode: 66, which: 66, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + b: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: â«, code: KeyB, keyIdentifier: U+0042, keyCode: 66, charCode: 0, keyCode: 66, which: 66, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: â«, code: KeyB, keyIdentifier: , keyCode: 8747, charCode: 8747, keyCode: 8747, which: 8747, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: â«, code: KeyB, keyIdentifier: U+0042, keyCode: 66, charCode: 0, keyCode: 66, which: 66, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + Option + b: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: â«, code: KeyB, keyIdentifier: U+0042, keyCode: 66, charCode: 0, keyCode: 66, which: 66, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: â«, code: KeyB, keyIdentifier: , keyCode: 8747, charCode: 8747, keyCode: 8747, which: 8747, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + c: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: c, code: KeyC, keyIdentifier: U+0043, keyCode: 67, charCode: 0, keyCode: 67, which: 67, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + c: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: ç, code: KeyC, keyIdentifier: U+0043, keyCode: 67, charCode: 0, keyCode: 67, which: 67, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: ç, code: KeyC, keyIdentifier: , keyCode: 231, charCode: 231, keyCode: 231, which: 231, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: ç, code: KeyC, keyIdentifier: U+0043, keyCode: 67, charCode: 0, keyCode: 67, which: 67, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + Option + c: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: ç, code: KeyC, keyIdentifier: U+0043, keyCode: 67, charCode: 0, keyCode: 67, which: 67, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: ç, code: KeyC, keyIdentifier: , keyCode: 231, charCode: 231, keyCode: 231, which: 231, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + d: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: d, code: KeyD, keyIdentifier: U+0044, keyCode: 68, charCode: 0, keyCode: 68, which: 68, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: d, code: KeyD, keyIdentifier: , keyCode: 100, charCode: 100, keyCode: 100, which: 100, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + d: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: â, code: KeyD, keyIdentifier: U+0044, keyCode: 68, charCode: 0, keyCode: 68, which: 68, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: â, code: KeyD, keyIdentifier: , keyCode: 8706, charCode: 8706, keyCode: 8706, which: 8706, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: â, code: KeyD, keyIdentifier: U+0044, keyCode: 68, charCode: 0, keyCode: 68, which: 68, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + Option + d: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: â, code: KeyD, keyIdentifier: U+0044, keyCode: 68, charCode: 0, keyCode: 68, which: 68, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: â, code: KeyD, keyIdentifier: , keyCode: 8706, charCode: 8706, keyCode: 8706, which: 8706, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + f: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: f, code: KeyF, keyIdentifier: U+0046, keyCode: 70, charCode: 0, keyCode: 70, which: 70, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: f, code: KeyF, keyIdentifier: , keyCode: 102, charCode: 102, keyCode: 102, which: 102, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + f: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Æ, code: KeyF, keyIdentifier: U+0046, keyCode: 70, charCode: 0, keyCode: 70, which: 70, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: Æ, code: KeyF, keyIdentifier: , keyCode: 402, charCode: 402, keyCode: 402, which: 402, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Æ, code: KeyF, keyIdentifier: U+0046, keyCode: 70, charCode: 0, keyCode: 70, which: 70, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + g: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: g, code: KeyG, keyIdentifier: U+0047, keyCode: 71, charCode: 0, keyCode: 71, which: 71, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: g, code: KeyG, keyIdentifier: , keyCode: 103, charCode: 103, keyCode: 103, which: 103, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + g: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: ©, code: KeyG, keyIdentifier: U+0047, keyCode: 71, charCode: 0, keyCode: 71, which: 71, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: ©, code: KeyG, keyIdentifier: , keyCode: 169, charCode: 169, keyCode: 169, which: 169, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: ©, code: KeyG, keyIdentifier: U+0047, keyCode: 71, charCode: 0, keyCode: 71, which: 71, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + Option + g: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: ©, code: KeyG, keyIdentifier: U+0047, keyCode: 71, charCode: 0, keyCode: 71, which: 71, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: ©, code: KeyG, keyIdentifier: , keyCode: 169, charCode: 169, keyCode: 169, which: 169, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + h: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: h, code: KeyH, keyIdentifier: U+0048, keyCode: 72, charCode: 0, keyCode: 72, which: 72, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: h, code: KeyH, keyIdentifier: , keyCode: 104, charCode: 104, keyCode: 104, which: 104, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + h: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Ë, code: KeyH, keyIdentifier: U+0048, keyCode: 72, charCode: 0, keyCode: 72, which: 72, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: Ë, code: KeyH, keyIdentifier: , keyCode: 729, charCode: 729, keyCode: 729, which: 729, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Ë, code: KeyH, keyIdentifier: U+0048, keyCode: 72, charCode: 0, keyCode: 72, which: 72, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + Option + h: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Ë, code: KeyH, keyIdentifier: U+0048, keyCode: 72, charCode: 0, keyCode: 72, which: 72, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: Ë, code: KeyH, keyIdentifier: , keyCode: 729, charCode: 729, keyCode: 729, which: 729, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + j: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: j, code: KeyJ, keyIdentifier: U+004A, keyCode: 74, charCode: 0, keyCode: 74, which: 74, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: j, code: KeyJ, keyIdentifier: , keyCode: 106, charCode: 106, keyCode: 106, which: 106, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + j: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: â, code: KeyJ, keyIdentifier: U+004A, keyCode: 74, charCode: 0, keyCode: 74, which: 74, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: â, code: KeyJ, keyIdentifier: , keyCode: 8710, charCode: 8710, keyCode: 8710, which: 8710, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: â, code: KeyJ, keyIdentifier: U+004A, keyCode: 74, charCode: 0, keyCode: 74, which: 74, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + Option + j: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: â, code: KeyJ, keyIdentifier: U+004A, keyCode: 74, charCode: 0, keyCode: 74, which: 74, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: â, code: KeyJ, keyIdentifier: , keyCode: 8710, charCode: 8710, keyCode: 8710, which: 8710, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + k: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: k, code: KeyK, keyIdentifier: U+004B, keyCode: 75, charCode: 0, keyCode: 75, which: 75, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: k, code: KeyK, keyIdentifier: , keyCode: 107, charCode: 107, keyCode: 107, which: 107, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + k: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Ë, code: KeyK, keyIdentifier: U+004B, keyCode: 75, charCode: 0, keyCode: 75, which: 75, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: Ë, code: KeyK, keyIdentifier: , keyCode: 730, charCode: 730, keyCode: 730, which: 730, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Ë, code: KeyK, keyIdentifier: U+004B, keyCode: 75, charCode: 0, keyCode: 75, which: 75, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + Option + k: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Ë, code: KeyK, keyIdentifier: U+004B, keyCode: 75, charCode: 0, keyCode: 75, which: 75, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: Ë, code: KeyK, keyIdentifier: , keyCode: 730, charCode: 730, keyCode: 730, which: 730, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + l: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: ¬, code: KeyL, keyIdentifier: U+004C, keyCode: 76, charCode: 0, keyCode: 76, which: 76, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: ¬, code: KeyL, keyIdentifier: , keyCode: 172, charCode: 172, keyCode: 172, which: 172, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: ¬, code: KeyL, keyIdentifier: U+004C, keyCode: 76, charCode: 0, keyCode: 76, which: 76, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + Option + l: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: ¬, code: KeyL, keyIdentifier: U+004C, keyCode: 76, charCode: 0, keyCode: 76, which: 76, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: ¬, code: KeyL, keyIdentifier: , keyCode: 172, charCode: 172, keyCode: 172, which: 172, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + m: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: m, code: KeyM, keyIdentifier: U+004D, keyCode: 77, charCode: 0, keyCode: 77, which: 77, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: m, code: KeyM, keyIdentifier: , keyCode: 109, charCode: 109, keyCode: 109, which: 109, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + m: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: µ, code: KeyM, keyIdentifier: U+004D, keyCode: 77, charCode: 0, keyCode: 77, which: 77, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: µ, code: KeyM, keyIdentifier: , keyCode: 181, charCode: 181, keyCode: 181, which: 181, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: µ, code: KeyM, keyIdentifier: U+004D, keyCode: 77, charCode: 0, keyCode: 77, which: 77, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + Option + m: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: µ, code: KeyM, keyIdentifier: U+004D, keyCode: 77, charCode: 0, keyCode: 77, which: 77, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: µ, code: KeyM, keyIdentifier: , keyCode: 181, charCode: 181, keyCode: 181, which: 181, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + o: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: o, code: KeyO, keyIdentifier: U+004F, keyCode: 79, charCode: 0, keyCode: 79, which: 79, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: o, code: KeyO, keyIdentifier: , keyCode: 111, charCode: 111, keyCode: 111, which: 111, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + o: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: ø, code: KeyO, keyIdentifier: U+004F, keyCode: 79, charCode: 0, keyCode: 79, which: 79, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: ø, code: KeyO, keyIdentifier: , keyCode: 248, charCode: 248, keyCode: 248, which: 248, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: ø, code: KeyO, keyIdentifier: U+004F, keyCode: 79, charCode: 0, keyCode: 79, which: 79, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + Option + o: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: ø, code: KeyO, keyIdentifier: U+004F, keyCode: 79, charCode: 0, keyCode: 79, which: 79, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: ø, code: KeyO, keyIdentifier: , keyCode: 248, charCode: 248, keyCode: 248, which: 248, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + p: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: p, code: KeyP, keyIdentifier: U+0050, keyCode: 80, charCode: 0, keyCode: 80, which: 80, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: p, code: KeyP, keyIdentifier: , keyCode: 112, charCode: 112, keyCode: 112, which: 112, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + p: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Ï, code: KeyP, keyIdentifier: U+0050, keyCode: 80, charCode: 0, keyCode: 80, which: 80, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: Ï, code: KeyP, keyIdentifier: , keyCode: 960, charCode: 960, keyCode: 960, which: 960, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Ï, code: KeyP, keyIdentifier: U+0050, keyCode: 80, charCode: 0, keyCode: 80, which: 80, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + Option + p: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Ï, code: KeyP, keyIdentifier: U+0050, keyCode: 80, charCode: 0, keyCode: 80, which: 80, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: Ï, code: KeyP, keyIdentifier: , keyCode: 960, charCode: 960, keyCode: 960, which: 960, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + q: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: q, code: KeyQ, keyIdentifier: U+0051, keyCode: 81, charCode: 0, keyCode: 81, which: 81, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: q, code: KeyQ, keyIdentifier: , keyCode: 113, charCode: 113, keyCode: 113, which: 113, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + q: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Å, code: KeyQ, keyIdentifier: U+0051, keyCode: 81, charCode: 0, keyCode: 81, which: 81, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: Å, code: KeyQ, keyIdentifier: , keyCode: 339, charCode: 339, keyCode: 339, which: 339, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Å, code: KeyQ, keyIdentifier: U+0051, keyCode: 81, charCode: 0, keyCode: 81, which: 81, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + Option + q: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Å, code: KeyQ, keyIdentifier: U+0051, keyCode: 81, charCode: 0, keyCode: 81, which: 81, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: Å, code: KeyQ, keyIdentifier: , keyCode: 339, charCode: 339, keyCode: 339, which: 339, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + r: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: ®, code: KeyR, keyIdentifier: U+0052, keyCode: 82, charCode: 0, keyCode: 82, which: 82, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: ®, code: KeyR, keyIdentifier: , keyCode: 174, charCode: 174, keyCode: 174, which: 174, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: ®, code: KeyR, keyIdentifier: U+0052, keyCode: 82, charCode: 0, keyCode: 82, which: 82, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + s: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: s, code: KeyS, keyIdentifier: U+0053, keyCode: 83, charCode: 0, keyCode: 83, which: 83, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: s, code: KeyS, keyIdentifier: , keyCode: 115, charCode: 115, keyCode: 115, which: 115, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + s: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Ã, code: KeyS, keyIdentifier: U+0053, keyCode: 83, charCode: 0, keyCode: 83, which: 83, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: Ã, code: KeyS, keyIdentifier: , keyCode: 223, charCode: 223, keyCode: 223, which: 223, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Ã, code: KeyS, keyIdentifier: U+0053, keyCode: 83, charCode: 0, keyCode: 83, which: 83, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + Option + s: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Ã, code: KeyS, keyIdentifier: U+0053, keyCode: 83, charCode: 0, keyCode: 83, which: 83, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: Ã, code: KeyS, keyIdentifier: , keyCode: 223, charCode: 223, keyCode: 223, which: 223, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + t: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: â , code: KeyT, keyIdentifier: U+0054, keyCode: 84, charCode: 0, keyCode: 84, which: 84, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: â , code: KeyT, keyIdentifier: , keyCode: 8224, charCode: 8224, keyCode: 8224, which: 8224, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: â , code: KeyT, keyIdentifier: U+0054, keyCode: 84, charCode: 0, keyCode: 84, which: 84, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + Option + t: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: â , code: KeyT, keyIdentifier: U+0054, keyCode: 84, charCode: 0, keyCode: 84, which: 84, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: â , code: KeyT, keyIdentifier: , keyCode: 8224, charCode: 8224, keyCode: 8224, which: 8224, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + v: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: v, code: KeyV, keyIdentifier: U+0056, keyCode: 86, charCode: 0, keyCode: 86, which: 86, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + v: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: â, code: KeyV, keyIdentifier: U+0056, keyCode: 86, charCode: 0, keyCode: 86, which: 86, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: â, code: KeyV, keyIdentifier: , keyCode: 8730, charCode: 8730, keyCode: 8730, which: 8730, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: â, code: KeyV, keyIdentifier: U+0056, keyCode: 86, charCode: 0, keyCode: 86, which: 86, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + Option + v: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: â, code: KeyV, keyIdentifier: U+0056, keyCode: 86, charCode: 0, keyCode: 86, which: 86, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: â, code: KeyV, keyIdentifier: , keyCode: 8730, charCode: 8730, keyCode: 8730, which: 8730, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + w: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: â, code: KeyW, keyIdentifier: U+0057, keyCode: 87, charCode: 0, keyCode: 87, which: 87, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: â, code: KeyW, keyIdentifier: , keyCode: 8721, charCode: 8721, keyCode: 8721, which: 8721, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: â, code: KeyW, keyIdentifier: U+0057, keyCode: 87, charCode: 0, keyCode: 87, which: 87, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + x: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: x, code: KeyX, keyIdentifier: U+0058, keyCode: 88, charCode: 0, keyCode: 88, which: 88, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + x: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: â, code: KeyX, keyIdentifier: U+0058, keyCode: 88, charCode: 0, keyCode: 88, which: 88, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: â, code: KeyX, keyIdentifier: , keyCode: 8776, charCode: 8776, keyCode: 8776, which: 8776, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: â, code: KeyX, keyIdentifier: U+0058, keyCode: 88, charCode: 0, keyCode: 88, which: 88, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + Option + x: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: â, code: KeyX, keyIdentifier: U+0058, keyCode: 88, charCode: 0, keyCode: 88, which: 88, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: â, code: KeyX, keyIdentifier: , keyCode: 8776, charCode: 8776, keyCode: 8776, which: 8776, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + y: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: y, code: KeyY, keyIdentifier: U+0059, keyCode: 89, charCode: 0, keyCode: 89, which: 89, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: y, code: KeyY, keyIdentifier: , keyCode: 121, charCode: 121, keyCode: 121, which: 121, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + y: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Â¥, code: KeyY, keyIdentifier: U+0059, keyCode: 89, charCode: 0, keyCode: 89, which: 89, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: Â¥, code: KeyY, keyIdentifier: , keyCode: 165, charCode: 165, keyCode: 165, which: 165, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Â¥, code: KeyY, keyIdentifier: U+0059, keyCode: 89, charCode: 0, keyCode: 89, which: 89, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + Option + y: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Â¥, code: KeyY, keyIdentifier: U+0059, keyCode: 89, charCode: 0, keyCode: 89, which: 89, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: Â¥, code: KeyY, keyIdentifier: , keyCode: 165, charCode: 165, keyCode: 165, which: 165, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + z: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: z, code: KeyZ, keyIdentifier: U+005A, keyCode: 90, charCode: 0, keyCode: 90, which: 90, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + z: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Ω, code: KeyZ, keyIdentifier: U+005A, keyCode: 90, charCode: 0, keyCode: 90, which: 90, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: Ω, code: KeyZ, keyIdentifier: , keyCode: 937, charCode: 937, keyCode: 937, which: 937, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Ω, code: KeyZ, keyIdentifier: U+005A, keyCode: 90, charCode: 0, keyCode: 90, which: 90, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + Option + z: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Ω, code: KeyZ, keyIdentifier: U+005A, keyCode: 90, charCode: 0, keyCode: 90, which: 90, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: Ω, code: KeyZ, keyIdentifier: , keyCode: 937, charCode: 937, keyCode: 937, which: 937, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + 0: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: 0, code: Digit0, keyIdentifier: U+0030, keyCode: 48, charCode: 0, keyCode: 48, which: 48, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: 0, code: Digit0, keyIdentifier: , keyCode: 48, charCode: 48, keyCode: 48, which: 48, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + 0: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: º, code: Digit0, keyIdentifier: U+0030, keyCode: 48, charCode: 0, keyCode: 48, which: 48, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: º, code: Digit0, keyIdentifier: , keyCode: 186, charCode: 186, keyCode: 186, which: 186, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: º, code: Digit0, keyIdentifier: U+0030, keyCode: 48, charCode: 0, keyCode: 48, which: 48, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + Option + 0: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: º, code: Digit0, keyIdentifier: U+0030, keyCode: 48, charCode: 0, keyCode: 48, which: 48, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: º, code: Digit0, keyIdentifier: , keyCode: 186, charCode: 186, keyCode: 186, which: 186, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + 1: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: ¡, code: Digit1, keyIdentifier: U+0031, keyCode: 49, charCode: 0, keyCode: 49, which: 49, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: ¡, code: Digit1, keyIdentifier: , keyCode: 161, charCode: 161, keyCode: 161, which: 161, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: ¡, code: Digit1, keyIdentifier: U+0031, keyCode: 49, charCode: 0, keyCode: 49, which: 49, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + Option + 1: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: ¡, code: Digit1, keyIdentifier: U+0031, keyCode: 49, charCode: 0, keyCode: 49, which: 49, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: ¡, code: Digit1, keyIdentifier: , keyCode: 161, charCode: 161, keyCode: 161, which: 161, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + 2: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: â¢, code: Digit2, keyIdentifier: U+0032, keyCode: 50, charCode: 0, keyCode: 50, which: 50, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: â¢, code: Digit2, keyIdentifier: , keyCode: 8482, charCode: 8482, keyCode: 8482, which: 8482, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: â¢, code: Digit2, keyIdentifier: U+0032, keyCode: 50, charCode: 0, keyCode: 50, which: 50, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + Option + 2: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: â¢, code: Digit2, keyIdentifier: U+0032, keyCode: 50, charCode: 0, keyCode: 50, which: 50, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: â¢, code: Digit2, keyIdentifier: , keyCode: 8482, charCode: 8482, keyCode: 8482, which: 8482, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + 3: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: £, code: Digit3, keyIdentifier: U+0033, keyCode: 51, charCode: 0, keyCode: 51, which: 51, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: £, code: Digit3, keyIdentifier: , keyCode: 163, charCode: 163, keyCode: 163, which: 163, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: £, code: Digit3, keyIdentifier: U+0033, keyCode: 51, charCode: 0, keyCode: 51, which: 51, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + Option + 3: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: £, code: Digit3, keyIdentifier: U+0033, keyCode: 51, charCode: 0, keyCode: 51, which: 51, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: £, code: Digit3, keyIdentifier: , keyCode: 163, charCode: 163, keyCode: 163, which: 163, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + 4: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: ¢, code: Digit4, keyIdentifier: U+0034, keyCode: 52, charCode: 0, keyCode: 52, which: 52, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: ¢, code: Digit4, keyIdentifier: , keyCode: 162, charCode: 162, keyCode: 162, which: 162, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: ¢, code: Digit4, keyIdentifier: U+0034, keyCode: 52, charCode: 0, keyCode: 52, which: 52, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + Option + 4: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: ¢, code: Digit4, keyIdentifier: U+0034, keyCode: 52, charCode: 0, keyCode: 52, which: 52, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: ¢, code: Digit4, keyIdentifier: , keyCode: 162, charCode: 162, keyCode: 162, which: 162, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + 5: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: â, code: Digit5, keyIdentifier: U+0035, keyCode: 53, charCode: 0, keyCode: 53, which: 53, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: â, code: Digit5, keyIdentifier: , keyCode: 8734, charCode: 8734, keyCode: 8734, which: 8734, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: â, code: Digit5, keyIdentifier: U+0035, keyCode: 53, charCode: 0, keyCode: 53, which: 53, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + Option + 5: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: â, code: Digit5, keyIdentifier: U+0035, keyCode: 53, charCode: 0, keyCode: 53, which: 53, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: â, code: Digit5, keyIdentifier: , keyCode: 8734, charCode: 8734, keyCode: 8734, which: 8734, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + 6: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: §, code: Digit6, keyIdentifier: U+0036, keyCode: 54, charCode: 0, keyCode: 54, which: 54, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: §, code: Digit6, keyIdentifier: , keyCode: 167, charCode: 167, keyCode: 167, which: 167, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: §, code: Digit6, keyIdentifier: U+0036, keyCode: 54, charCode: 0, keyCode: 54, which: 54, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + Option + 6: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: §, code: Digit6, keyIdentifier: U+0036, keyCode: 54, charCode: 0, keyCode: 54, which: 54, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: §, code: Digit6, keyIdentifier: , keyCode: 167, charCode: 167, keyCode: 167, which: 167, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + 7: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: ¶, code: Digit7, keyIdentifier: U+0037, keyCode: 55, charCode: 0, keyCode: 55, which: 55, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: ¶, code: Digit7, keyIdentifier: , keyCode: 182, charCode: 182, keyCode: 182, which: 182, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: ¶, code: Digit7, keyIdentifier: U+0037, keyCode: 55, charCode: 0, keyCode: 55, which: 55, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + Option + 7: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: ¶, code: Digit7, keyIdentifier: U+0037, keyCode: 55, charCode: 0, keyCode: 55, which: 55, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: ¶, code: Digit7, keyIdentifier: , keyCode: 182, charCode: 182, keyCode: 182, which: 182, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + 8: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: â¢, code: Digit8, keyIdentifier: U+0038, keyCode: 56, charCode: 0, keyCode: 56, which: 56, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: â¢, code: Digit8, keyIdentifier: , keyCode: 8226, charCode: 8226, keyCode: 8226, which: 8226, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: â¢, code: Digit8, keyIdentifier: U+0038, keyCode: 56, charCode: 0, keyCode: 56, which: 56, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + Option + 8: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: â¢, code: Digit8, keyIdentifier: U+0038, keyCode: 56, charCode: 0, keyCode: 56, which: 56, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: â¢, code: Digit8, keyIdentifier: , keyCode: 8226, charCode: 8226, keyCode: 8226, which: 8226, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + 9: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: ª, code: Digit9, keyIdentifier: U+0039, keyCode: 57, charCode: 0, keyCode: 57, which: 57, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: ª, code: Digit9, keyIdentifier: , keyCode: 170, charCode: 170, keyCode: 170, which: 170, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: ª, code: Digit9, keyIdentifier: U+0039, keyCode: 57, charCode: 0, keyCode: 57, which: 57, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + Option + 9: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: ª, code: Digit9, keyIdentifier: U+0039, keyCode: 57, charCode: 0, keyCode: 57, which: 57, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: ª, code: Digit9, keyIdentifier: , keyCode: 170, charCode: 170, keyCode: 170, which: 170, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + -: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: -, code: Minus, keyIdentifier: U+002D, keyCode: 189, charCode: 0, keyCode: 189, which: 189, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: -, code: Minus, keyIdentifier: , keyCode: 45, charCode: 45, keyCode: 45, which: 45, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + -: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: â, code: Minus, keyIdentifier: U+002D, keyCode: 189, charCode: 0, keyCode: 189, which: 189, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: â, code: Minus, keyIdentifier: , keyCode: 8211, charCode: 8211, keyCode: 8211, which: 8211, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: â, code: Minus, keyIdentifier: U+002D, keyCode: 189, charCode: 0, keyCode: 189, which: 189, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + Option + -: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: â, code: Minus, keyIdentifier: U+002D, keyCode: 189, charCode: 0, keyCode: 189, which: 189, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: â, code: Minus, keyIdentifier: , keyCode: 8211, charCode: 8211, keyCode: 8211, which: 8211, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + =: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: =, code: Equal, keyIdentifier: U+003D, keyCode: 187, charCode: 0, keyCode: 187, which: 187, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: =, code: Equal, keyIdentifier: , keyCode: 61, charCode: 61, keyCode: 61, which: 61, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + =: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: â , code: Equal, keyIdentifier: U+003D, keyCode: 187, charCode: 0, keyCode: 187, which: 187, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: â , code: Equal, keyIdentifier: , keyCode: 8800, charCode: 8800, keyCode: 8800, which: 8800, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: â , code: Equal, keyIdentifier: U+003D, keyCode: 187, charCode: 0, keyCode: 187, which: 187, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + Option + =: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: â , code: Equal, keyIdentifier: U+003D, keyCode: 187, charCode: 0, keyCode: 187, which: 187, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: â , code: Equal, keyIdentifier: , keyCode: 8800, charCode: 8800, keyCode: 8800, which: 8800, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + [: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: â, code: BracketLeft, keyIdentifier: U+005B, keyCode: 219, charCode: 0, keyCode: 219, which: 219, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: â, code: BracketLeft, keyIdentifier: , keyCode: 8220, charCode: 8220, keyCode: 8220, which: 8220, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: â, code: BracketLeft, keyIdentifier: U+005B, keyCode: 219, charCode: 0, keyCode: 219, which: 219, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + Option + [: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: â, code: BracketLeft, keyIdentifier: U+005B, keyCode: 219, charCode: 0, keyCode: 219, which: 219, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: â, code: BracketLeft, keyIdentifier: , keyCode: 8220, charCode: 8220, keyCode: 8220, which: 8220, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + ]: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: â, code: BracketRight, keyIdentifier: U+005D, keyCode: 221, charCode: 0, keyCode: 221, which: 221, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: â, code: BracketRight, keyIdentifier: , keyCode: 8216, charCode: 8216, keyCode: 8216, which: 8216, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: â, code: BracketRight, keyIdentifier: U+005D, keyCode: 221, charCode: 0, keyCode: 221, which: 221, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + Option + ]: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: â, code: BracketRight, keyIdentifier: U+005D, keyCode: 221, charCode: 0, keyCode: 221, which: 221, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: â, code: BracketRight, keyIdentifier: , keyCode: 8216, charCode: 8216, keyCode: 8216, which: 8216, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + ;: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: ;, code: Semicolon, keyIdentifier: U+003B, keyCode: 186, charCode: 0, keyCode: 186, which: 186, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: ;, code: Semicolon, keyIdentifier: , keyCode: 59, charCode: 59, keyCode: 59, which: 59, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + ;: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: â¦, code: Semicolon, keyIdentifier: U+003B, keyCode: 186, charCode: 0, keyCode: 186, which: 186, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: â¦, code: Semicolon, keyIdentifier: , keyCode: 8230, charCode: 8230, keyCode: 8230, which: 8230, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: â¦, code: Semicolon, keyIdentifier: U+003B, keyCode: 186, charCode: 0, keyCode: 186, which: 186, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + Option + ;: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: â¦, code: Semicolon, keyIdentifier: U+003B, keyCode: 186, charCode: 0, keyCode: 186, which: 186, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: â¦, code: Semicolon, keyIdentifier: , keyCode: 8230, charCode: 8230, keyCode: 8230, which: 8230, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + ': >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: ', code: Quote, keyIdentifier: U+0027, keyCode: 222, charCode: 0, keyCode: 222, which: 222, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: ', code: Quote, keyIdentifier: , keyCode: 39, charCode: 39, keyCode: 39, which: 39, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + ': >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: æ, code: Quote, keyIdentifier: U+0027, keyCode: 222, charCode: 0, keyCode: 222, which: 222, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: æ, code: Quote, keyIdentifier: , keyCode: 230, charCode: 230, keyCode: 230, which: 230, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: æ, code: Quote, keyIdentifier: U+0027, keyCode: 222, charCode: 0, keyCode: 222, which: 222, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + Option + ': >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: æ, code: Quote, keyIdentifier: U+0027, keyCode: 222, charCode: 0, keyCode: 222, which: 222, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: æ, code: Quote, keyIdentifier: , keyCode: 230, charCode: 230, keyCode: 230, which: 230, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + ,: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: ,, code: Comma, keyIdentifier: U+002C, keyCode: 188, charCode: 0, keyCode: 188, which: 188, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: ,, code: Comma, keyIdentifier: , keyCode: 44, charCode: 44, keyCode: 44, which: 44, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + ,: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: â¤, code: Comma, keyIdentifier: U+002C, keyCode: 188, charCode: 0, keyCode: 188, which: 188, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: â¤, code: Comma, keyIdentifier: , keyCode: 8804, charCode: 8804, keyCode: 8804, which: 8804, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: â¤, code: Comma, keyIdentifier: U+002C, keyCode: 188, charCode: 0, keyCode: 188, which: 188, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + Option + ,: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: â¤, code: Comma, keyIdentifier: U+002C, keyCode: 188, charCode: 0, keyCode: 188, which: 188, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: â¤, code: Comma, keyIdentifier: , keyCode: 8804, charCode: 8804, keyCode: 8804, which: 8804, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + .: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: ., code: Period, keyIdentifier: U+002E, keyCode: 190, charCode: 0, keyCode: 190, which: 190, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: ., code: Period, keyIdentifier: , keyCode: 46, charCode: 46, keyCode: 46, which: 46, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: ., code: Period, keyIdentifier: U+002E, keyCode: 190, charCode: 0, keyCode: 190, which: 190, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + .: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: â¥, code: Period, keyIdentifier: U+002E, keyCode: 190, charCode: 0, keyCode: 190, which: 190, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: â¥, code: Period, keyIdentifier: , keyCode: 8805, charCode: 8805, keyCode: 8805, which: 8805, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: â¥, code: Period, keyIdentifier: U+002E, keyCode: 190, charCode: 0, keyCode: 190, which: 190, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + Option + .: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: â¥, code: Period, keyIdentifier: Unidentified, keyCode: 85, charCode: 0, keyCode: 85, which: 85, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: â¥, code: Period, keyIdentifier: , keyCode: 8805, charCode: 8805, keyCode: 8805, which: 8805, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: â¥, code: Period, keyIdentifier: Unidentified, keyCode: 85, charCode: 0, keyCode: 85, which: 85, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + /: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: /, code: Slash, keyIdentifier: U+002F, keyCode: 191, charCode: 0, keyCode: 191, which: 191, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: /, code: Slash, keyIdentifier: , keyCode: 47, charCode: 47, keyCode: 47, which: 47, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Option + /: >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: ÷, code: Slash, keyIdentifier: U+002F, keyCode: 191, charCode: 0, keyCode: 191, which: 191, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: ÷, code: Slash, keyIdentifier: , keyCode: 247, charCode: 247, keyCode: 247, which: 247, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: ÷, code: Slash, keyIdentifier: U+002F, keyCode: 191, charCode: 0, keyCode: 191, which: 191, altKey: true, ctrlKey: false, metaKey: false, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >+Test Command + Option + /: >+type: keydown, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keydown, key: ÷, code: Slash, keyIdentifier: U+002F, keyCode: 191, charCode: 0, keyCode: 191, which: 191, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keypress, key: ÷, code: Slash, keyIdentifier: , keyCode: 247, charCode: 247, keyCode: 247, which: 247, altKey: true, ctrlKey: false, metaKey: true, shiftKey: false, location: 0, keyLocation: 0 >+type: keyup, key: Alt, code: Unidentified, keyIdentifier: Alt, keyCode: 18, charCode: 0, keyCode: 18, which: 18, altKey: false, ctrlKey: false, metaKey: true, shiftKey: false, location: 1, keyLocation: 1 >+type: keyup, key: Meta, code: MetaLeft, keyIdentifier: Meta, keyCode: 91, charCode: 0, keyCode: 91, which: 91, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false, location: 1, keyLocation: 1 >+ >diff --git a/LayoutTests/fast/events/ios/key-events-meta-alt-combinations.html b/LayoutTests/fast/events/ios/key-events-meta-alt-combinations.html >new file mode 100644 >index 0000000000000000000000000000000000000000..fe88d341ebdba1d87410f0979c83f364f616c260 >--- /dev/null >+++ b/LayoutTests/fast/events/ios/key-events-meta-alt-combinations.html >@@ -0,0 +1,18 @@ >+<!DOCTYPE html> >+<html> >+<head> >+<script src="../../../resources/ui-helper.js"></script> >+<script src="resources/key-tester.js"></script> >+<script> >+const modiferKeySubsetsToTest = computeSubsets(["metaKey", "altKey"]); >+for (const k of keysExcludingDeadAndSkippedKeys) { >+ for (const modifiers of modiferKeySubsetsToTest) >+ tests.push(new KeyCommand(k, modifiers)); >+} >+</script> >+</head> >+<body> >+<p>This logs DOM keydown, keyup, keypress events that are dispatched when pressing key commands of the form <key>Command<key> + <key>X</key>, <key>Option<key> + <key>X</key> and <key>Command<key> + <key>Option<key> + <key>X</key>. Must be run in WebKitTestRunner.</p> >+<pre id="console"></pre> >+</body> >+</html> >diff --git a/LayoutTests/fast/events/ios/resources/key-tester.js b/LayoutTests/fast/events/ios/resources/key-tester.js >new file mode 100644 >index 0000000000000000000000000000000000000000..5748070b3b8fa3b6fb80be7ebb844537c6cdba40 >--- /dev/null >+++ b/LayoutTests/fast/events/ios/resources/key-tester.js >@@ -0,0 +1,231 @@ >+if (window.testRunner) { >+ testRunner.dumpAsText(); >+ testRunner.waitUntilDone(); >+} >+ >+let currentTest; >+let numberOfKeyUpsRemaining; >+let modifierKeyUpsSeenSoFar; >+ >+function computeDifference(a, b) >+{ >+ let result = new Set(a); >+ for (let item of b) >+ result.delete(item); >+ return result; >+} >+ >+// From js-test.js >+function areArraysEqual(a, b) >+{ >+ try { >+ if (a.length !== b.length) >+ return false; >+ for (var i = 0; i < a.length; i++) >+ if (a[i] !== b[i]) >+ return false; >+ } catch (ex) { >+ return false; >+ } >+ return true; >+} >+ >+function areKeyCommandsEqual(a, b) >+{ >+ return a.key == b.key && areArraysEqual(a.modifiers, b.modifiers); >+} >+ >+class KeyCommand { >+ constructor(key, modifiers = []) >+ { >+ this.key = key; >+ this.modifiers = modifiers; >+ } >+ >+ toString() >+ { >+ return `{ ${this.key}, [${this.modifiers}] }`; >+ } >+} >+ >+function keyCommandsHasCommand(keyCommands, command) >+{ >+ return !!keyCommands.find((k) => areKeyCommandsEqual(k, command)); >+} >+ >+// This algorithm runs in O(2^N). >+function computeSubsets(anArray) >+{ >+ function compareByModifierOrder(a, b) { >+ if (a.length < b.length) >+ return -1; >+ if (a.length > b.length) >+ return 1; >+ for (let i = 0; i < a.length; ++i) { >+ let rankA = anArray.indexOf(a[i]); >+ let rankB = anArray.indexOf(b[i]); >+ if (rankA < rankB) >+ return -1; >+ if (rankA > rankB) >+ return 1; >+ } >+ return 0; >+ } >+ let result = []; >+ const numberOfNonEmptyPermutations = (1 << anArray.length) - 1; >+ // For each ordinal 1, 2, ... numberOfNonEmptyPermutations we look at its binary representation >+ // and generate a permutation that consists of the entries in anArray at the indices where there >+ // is a one bit in the binary representation. For example, suppose anArray = ["metaKey", "altKey", "ctrlKey"]. >+ // To generate the 5th permutation we look at the binary representation of i = 5 => 0b101. And >+ // compute the permutation to be [ anArray[0], anArray[2] ] = [ "metaKey", "ctrlKey" ] because >+ // the 0th and 2nd bits are ones in the binary representation. >+ for (let i = 1; i <= numberOfNonEmptyPermutations; ++i) { >+ let temp = []; >+ for (let bitmask = i, j = 0; bitmask; bitmask = Math.floor(bitmask / 2), ++j) { >+ if (bitmask % 2) >+ temp.push(anArray[j]); >+ } >+ result.push(temp); >+ } >+ return result.sort(compareByModifierOrder); >+} >+ >+const keys = new Set("abcdefghijklmnopqrstuvwxyz0123456789-=[]\\;',./".split("")); >+const deadKeys = new Set("`euin".split("")); >+const keysExcludingDeadKeys = computeDifference(keys, deadKeys); >+const functionKeys = new Set(["F5", "F6", "F13", "F14", "F15"]); >+ >+// FIXME: For some reason the following keys do not emit DOM key events (why?). >+const keysToSkip = new Set(["\\"]); >+const keysExcludingDeadAndSkippedKeys = computeDifference(keysExcludingDeadKeys, keysToSkip); >+ >+let disallowedKeyCommands = [ >+ new KeyCommand("l", ["metaKey"]), >+ new KeyCommand("f", ["metaKey", "altKey"]), >+ new KeyCommand("t", ["metaKey"]), >+ new KeyCommand("w", ["metaKey"]), >+ new KeyCommand("w", ["metaKey", "altKey"]), >+ new KeyCommand("n", ["metaKey"]), >+ new KeyCommand("\t", ["ctrlKey"]), >+ new KeyCommand("\t", ["ctrlKey", "shiftKey"]), >+ new KeyCommand("[", ["metaKey"]), >+ new KeyCommand("]", ["metaKey"]), >+ new KeyCommand("r", ["metaKey"]), >+ new KeyCommand("r", ["metaKey", "altKey"]), >+]; >+for (let i = 1; i <= 9; ++i) >+ disallowedKeyCommands.push(new KeyCommand(i, ["metaKey"])); >+ >+const modifierKeys = ["metaKey", "altKey", "ctrlKey", "shiftKey"]; >+const modiferKeySubsets = computeSubsets(modifierKeys); >+ >+let tests = []; >+ >+function handleKeyDown(event) >+{ >+ logKeyEvent(event); >+} >+ >+function handleKeyUp(event) >+{ >+ logKeyEvent(event); >+ >+ switch (event.key) { >+ case "Alt": >+ modifierKeyUpsSeenSoFar.unshift("altKey"); >+ break >+ case "Control": >+ modifierKeyUpsSeenSoFar.unshift("ctrlKey"); >+ break >+ case "Meta": >+ modifierKeyUpsSeenSoFar.unshift("metaKey"); >+ break; >+ case "Shift": >+ modifierKeyUpsSeenSoFar.unshift("shiftKey"); >+ break; >+ case "CapsLock": >+ modifierKeyUpsSeenSoFar.unshift("capsLockKey"); >+ break; >+ } >+ >+ --numberOfKeyUpsRemaining; >+ >+ // Either we received all keyup events or we are missing a keyup for the non-modifier key. The latter can happen >+ // if we triggered a key command (e.g. Command + Option + b). Regardless, move on to the next test. >+ if (!numberOfKeyUpsRemaining || numberOfKeyUpsRemaining == 1 && areArraysEqual(modifierKeyUpsSeenSoFar, currentTest.modifiers)) >+ nextKeyPress(); >+} >+ >+function handleKeyPress(event) >+{ >+ event.preventDefault(); >+ logKeyEvent(event); >+} >+ >+function log(message) >+{ >+ document.getElementById("console").appendChild(document.createTextNode(message + "\n")); >+} >+ >+function logKeyEvent(event) >+{ >+ let pieces = []; >+ for (let propertyName of ["type", "key", "code", "keyIdentifier", "keyCode", "charCode", "keyCode", "which", "altKey", "ctrlKey", "metaKey", "shiftKey", "location", "keyLocation"]) >+ pieces.push(`${propertyName}: ${event[propertyName]}`); >+ log(pieces.join(", ")); >+} >+ >+const modifierDisplayNameMap = { >+ "altKey": "Option", >+ "ctrlKey": "Control", >+ "metaKey": "Command", >+ "shiftKey": "Shift", >+ "capsLockKey": "Caps Lock", >+} >+ >+function displayNameForTest(test) >+{ >+ let displayNamesOfModifiers = []; >+ for (const modifier of test.modifiers) >+ displayNamesOfModifiers.push(modifierDisplayNameMap[modifier]); >+ let result = ""; >+ if (displayNamesOfModifiers.length) >+ result += displayNamesOfModifiers.join(" + ") + " + "; >+ result += test.key; >+ return result; >+} >+ >+function nextKeyPress() >+{ >+ if (!tests.length) { >+ if (window.testRunner) >+ testRunner.notifyDone(); >+ return; >+ } >+ currentTest = tests.shift(); >+ modifierKeyUpsSeenSoFar = []; >+ const numberOfNonModifierKeys = 1; >+ numberOfKeyUpsRemaining = currentTest.modifiers.length + numberOfNonModifierKeys; >+ log(`\nTest ${displayNameForTest(currentTest)}:`); >+ if (window.testRunner) >+ UIHelper.keyDown(currentTest.key, currentTest.modifiers); >+} >+ >+function runTest() >+{ >+ if (!window.testRunner) >+ return; >+ tests = tests.filter((k) => !keyCommandsHasCommand(disallowedKeyCommands, k)); >+ nextKeyPress(); >+} >+ >+function setUp() >+{ >+ document.body.addEventListener("keydown", handleKeyDown, true); >+ document.body.addEventListener("keyup", handleKeyUp, true); >+ document.body.addEventListener("keypress", handleKeyPress, true); >+ >+ runTest(); >+} >+ >+window.addEventListener("load", setUp, true);
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 193452
:
359173
| 360188