Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Brazilian Keyboard Layout: Can not connect different commands on Windows. #23685

Closed
Tekbr opened this issue Mar 30, 2017 · 13 comments
Closed

Brazilian Keyboard Layout: Can not connect different commands on Windows. #23685

Tekbr opened this issue Mar 30, 2017 · 13 comments
Assignees
Labels
bug Issue identified by VS Code Team member as probable bug keybindings VS Code keybinding issues keyboard-layout Keyboard layout issues verified Verification succeeded windows VS Code on Windows issues
Milestone

Comments

@Tekbr
Copy link

Tekbr commented Mar 30, 2017

  • VSCode Version: 1.11.0 - Insideres (bc9a7bb 2017-03-30T08: 11: 58.005Z)
  • OS Version: Windows 10

-- Sorry for the English, I used Google Translator --

@alexandrudima As you suggested in the #22626

Steps to Reproduce:

1- Edit keybindings.json
2- Click Define Keybinding (Ctrl + K Ctrl + K)
3- Press Ctrl + ; on a Brazilian Keyboard

Expected:

Keys showed should be Ctrl + ;

Result:
Keys showed is Ctrl + /

Here a gif with the keys that are different in Brazilian keyboard.

keybr

Here is an example of a Brazilian keyboard. (The settings of the keyboards may vary depending on the notebook manufacturer or keyboard manufacturer).

Example of the keyboard I use.

teclado

Image of Wikipedia, where it shows that some keys can change position. Example: / in blue.

kb_portuguese_brazil

@alexdima alexdima added keyboard-layout Keyboard layout issues windows VS Code on Windows issues labels Mar 31, 2017
@alexdima alexdima added the keybindings VS Code keybinding issues label Apr 10, 2017
@alexdima alexdima changed the title [Windows]Can not connect different commands in a Brazilian keyboard. Brazilian Keyboard Layout: Can not connect different commands on Windows. Apr 10, 2017
@alexdima alexdima added this to the Backlog milestone Apr 12, 2017
@alexdima alexdima added the bug Issue identified by VS Code Team member as probable bug label Apr 26, 2017
@alexdima
Copy link
Member

@Tekbr

There is one key in your gif that prints unknown and that is not mappable for you, the / or [IntlRo] key I believe (as described at https://w3c.github.io/uievents-code/#keyboard-104). I would be interested to learn what keyCode value that key produces such that I can look into mapping it to a VK in our sources.

May I kindly ask that you press this key and hover over the input box as I do in the gif below. Here I am doing it for ctrl+shift+w, but can you try doing it for /. Alternatively perhaps you could press it in Chrome at https://jsfiddle.net/v1gz5c5m/1/:

keyboard-input

@Tekbr
Copy link
Author

Tekbr commented Apr 28, 2017

@alexandrudima
Here it is. Looking at the site you mentioned above, the 'point' '.' on the numeric keypad is also not recognized. The same appears as unknown.

Be the gif in the VSCode for the two keys, first the / and then the . .

key2

Here's the Chrome image:

key2

@alexdima
Copy link
Member

alexdima commented May 11, 2017

alexdima added a commit to microsoft/node-native-keymap that referenced this issue May 11, 2017
@alexdima alexdima modified the milestones: May 2017, Backlog May 11, 2017
@Tekbr
Copy link
Author

Tekbr commented May 11, 2017

Thank you @alexandrudima .

I look forward to updating VSCode-Insiders tomorrow. 🎉 😄

Thank you one more time. And congratulations to you and the whole team. 👏👏👏👏👏

@Tekbr
Copy link
Author

Tekbr commented May 12, 2017

@alexandrudima See the gif.

keyupdate

I think some details are missing.

The same does not appear yet according to what I typed. That is with the key of my keyboard.

Note: When you press [ or ] for the first time, two combinations occur. But when pressed for a second time the same appears a unique combination.

@Tekbr
Copy link
Author

Tekbr commented May 12, 2017

@alexandrudima This is the result when I run: developer: Inspect key Mappings

Click to expand
Layout info:
{
	"name": "00010416",
	"id": "0010",
	"text": "Portuguese (Brazilian ABNT2)"
}
------------------------------------------------------------------------------------------------------------
|       HW Code combination      |  Key  |    KeyCode combination    |          UI label         | WYSIWYG |
------------------------------------------------------------------------------------------------------------
|                           KeyA |   a   |                         A |                         A |         |
|                     Shift+KeyA |   A   |                   Shift+A |                   Shift+A |         |
|                  Ctrl+Alt+KeyA |  ---  |                Ctrl+Alt+A |                Ctrl+Alt+A |         |
|            Ctrl+Shift+Alt+KeyA |  ---  |          Ctrl+Shift+Alt+A |          Ctrl+Shift+Alt+A |         |
------------------------------------------------------------------------------------------------------------
|                           KeyB |   b   |                         B |                         B |         |
|                     Shift+KeyB |   B   |                   Shift+B |                   Shift+B |         |
|                  Ctrl+Alt+KeyB |  ---  |                Ctrl+Alt+B |                Ctrl+Alt+B |         |
|            Ctrl+Shift+Alt+KeyB |  ---  |          Ctrl+Shift+Alt+B |          Ctrl+Shift+Alt+B |         |
------------------------------------------------------------------------------------------------------------
|                           KeyC |   c   |                         C |                         C |         |
|                     Shift+KeyC |   C   |                   Shift+C |                   Shift+C |         |
|                  Ctrl+Alt+KeyC |   ₢   |                Ctrl+Alt+C |                Ctrl+Alt+C |         |
|            Ctrl+Shift+Alt+KeyC |  ---  |          Ctrl+Shift+Alt+C |          Ctrl+Shift+Alt+C |         |
------------------------------------------------------------------------------------------------------------
|                           KeyD |   d   |                         D |                         D |         |
|                     Shift+KeyD |   D   |                   Shift+D |                   Shift+D |         |
|                  Ctrl+Alt+KeyD |  ---  |                Ctrl+Alt+D |                Ctrl+Alt+D |         |
|            Ctrl+Shift+Alt+KeyD |  ---  |          Ctrl+Shift+Alt+D |          Ctrl+Shift+Alt+D |         |
------------------------------------------------------------------------------------------------------------
|                           KeyE |   e   |                         E |                         E |         |
|                     Shift+KeyE |   E   |                   Shift+E |                   Shift+E |         |
|                  Ctrl+Alt+KeyE |   °   |                Ctrl+Alt+E |                Ctrl+Alt+E |         |
|            Ctrl+Shift+Alt+KeyE |  ---  |          Ctrl+Shift+Alt+E |          Ctrl+Shift+Alt+E |         |
------------------------------------------------------------------------------------------------------------
|                           KeyF |   f   |                         F |                         F |         |
|                     Shift+KeyF |   F   |                   Shift+F |                   Shift+F |         |
|                  Ctrl+Alt+KeyF |  ---  |                Ctrl+Alt+F |                Ctrl+Alt+F |         |
|            Ctrl+Shift+Alt+KeyF |  ---  |          Ctrl+Shift+Alt+F |          Ctrl+Shift+Alt+F |         |
------------------------------------------------------------------------------------------------------------
|       HW Code combination      |  Key  |    KeyCode combination    |          UI label         | WYSIWYG |
------------------------------------------------------------------------------------------------------------
|                           KeyG |   g   |                         G |                         G |         |
|                     Shift+KeyG |   G   |                   Shift+G |                   Shift+G |         |
|                  Ctrl+Alt+KeyG |  ---  |                Ctrl+Alt+G |                Ctrl+Alt+G |         |
|            Ctrl+Shift+Alt+KeyG |  ---  |          Ctrl+Shift+Alt+G |          Ctrl+Shift+Alt+G |         |
------------------------------------------------------------------------------------------------------------
|                           KeyH |   h   |                         H |                         H |         |
|                     Shift+KeyH |   H   |                   Shift+H |                   Shift+H |         |
|                  Ctrl+Alt+KeyH |  ---  |                Ctrl+Alt+H |                Ctrl+Alt+H |         |
|            Ctrl+Shift+Alt+KeyH |  ---  |          Ctrl+Shift+Alt+H |          Ctrl+Shift+Alt+H |         |
------------------------------------------------------------------------------------------------------------
|                           KeyI |   i   |                         I |                         I |         |
|                     Shift+KeyI |   I   |                   Shift+I |                   Shift+I |         |
|                  Ctrl+Alt+KeyI |  ---  |                Ctrl+Alt+I |                Ctrl+Alt+I |         |
|            Ctrl+Shift+Alt+KeyI |  ---  |          Ctrl+Shift+Alt+I |          Ctrl+Shift+Alt+I |         |
------------------------------------------------------------------------------------------------------------
|                           KeyJ |   j   |                         J |                         J |         |
|                     Shift+KeyJ |   J   |                   Shift+J |                   Shift+J |         |
|                  Ctrl+Alt+KeyJ |  ---  |                Ctrl+Alt+J |                Ctrl+Alt+J |         |
|            Ctrl+Shift+Alt+KeyJ |  ---  |          Ctrl+Shift+Alt+J |          Ctrl+Shift+Alt+J |         |
------------------------------------------------------------------------------------------------------------
|                           KeyK |   k   |                         K |                         K |         |
|                     Shift+KeyK |   K   |                   Shift+K |                   Shift+K |         |
|                  Ctrl+Alt+KeyK |  ---  |                Ctrl+Alt+K |                Ctrl+Alt+K |         |
|            Ctrl+Shift+Alt+KeyK |  ---  |          Ctrl+Shift+Alt+K |          Ctrl+Shift+Alt+K |         |
------------------------------------------------------------------------------------------------------------
|                           KeyL |   l   |                         L |                         L |         |
|                     Shift+KeyL |   L   |                   Shift+L |                   Shift+L |         |
|                  Ctrl+Alt+KeyL |  ---  |                Ctrl+Alt+L |                Ctrl+Alt+L |         |
|            Ctrl+Shift+Alt+KeyL |  ---  |          Ctrl+Shift+Alt+L |          Ctrl+Shift+Alt+L |         |
------------------------------------------------------------------------------------------------------------
|       HW Code combination      |  Key  |    KeyCode combination    |          UI label         | WYSIWYG |
------------------------------------------------------------------------------------------------------------
|                           KeyM |   m   |                         M |                         M |         |
|                     Shift+KeyM |   M   |                   Shift+M |                   Shift+M |         |
|                  Ctrl+Alt+KeyM |  ---  |                Ctrl+Alt+M |                Ctrl+Alt+M |         |
|            Ctrl+Shift+Alt+KeyM |  ---  |          Ctrl+Shift+Alt+M |          Ctrl+Shift+Alt+M |         |
------------------------------------------------------------------------------------------------------------
|                           KeyN |   n   |                         N |                         N |         |
|                     Shift+KeyN |   N   |                   Shift+N |                   Shift+N |         |
|                  Ctrl+Alt+KeyN |  ---  |                Ctrl+Alt+N |                Ctrl+Alt+N |         |
|            Ctrl+Shift+Alt+KeyN |  ---  |          Ctrl+Shift+Alt+N |          Ctrl+Shift+Alt+N |         |
------------------------------------------------------------------------------------------------------------
|                           KeyO |   o   |                         O |                         O |         |
|                     Shift+KeyO |   O   |                   Shift+O |                   Shift+O |         |
|                  Ctrl+Alt+KeyO |  ---  |                Ctrl+Alt+O |                Ctrl+Alt+O |         |
|            Ctrl+Shift+Alt+KeyO |  ---  |          Ctrl+Shift+Alt+O |          Ctrl+Shift+Alt+O |         |
------------------------------------------------------------------------------------------------------------
|                           KeyP |   p   |                         P |                         P |         |
|                     Shift+KeyP |   P   |                   Shift+P |                   Shift+P |         |
|                  Ctrl+Alt+KeyP |  ---  |                Ctrl+Alt+P |                Ctrl+Alt+P |         |
|            Ctrl+Shift+Alt+KeyP |  ---  |          Ctrl+Shift+Alt+P |          Ctrl+Shift+Alt+P |         |
------------------------------------------------------------------------------------------------------------
|                           KeyQ |   q   |                         Q |                         Q |         |
|                     Shift+KeyQ |   Q   |                   Shift+Q |                   Shift+Q |         |
|                  Ctrl+Alt+KeyQ |   /   |                Ctrl+Alt+Q |                Ctrl+Alt+Q |         |
|            Ctrl+Shift+Alt+KeyQ |  ---  |          Ctrl+Shift+Alt+Q |          Ctrl+Shift+Alt+Q |         |
------------------------------------------------------------------------------------------------------------
|                           KeyR |   r   |                         R |                         R |         |
|                     Shift+KeyR |   R   |                   Shift+R |                   Shift+R |         |
|                  Ctrl+Alt+KeyR |  ---  |                Ctrl+Alt+R |                Ctrl+Alt+R |         |
|            Ctrl+Shift+Alt+KeyR |  ---  |          Ctrl+Shift+Alt+R |          Ctrl+Shift+Alt+R |         |
------------------------------------------------------------------------------------------------------------
|       HW Code combination      |  Key  |    KeyCode combination    |          UI label         | WYSIWYG |
------------------------------------------------------------------------------------------------------------
|                           KeyS |   s   |                         S |                         S |         |
|                     Shift+KeyS |   S   |                   Shift+S |                   Shift+S |         |
|                  Ctrl+Alt+KeyS |  ---  |                Ctrl+Alt+S |                Ctrl+Alt+S |         |
|            Ctrl+Shift+Alt+KeyS |  ---  |          Ctrl+Shift+Alt+S |          Ctrl+Shift+Alt+S |         |
------------------------------------------------------------------------------------------------------------
|                           KeyT |   t   |                         T |                         T |         |
|                     Shift+KeyT |   T   |                   Shift+T |                   Shift+T |         |
|                  Ctrl+Alt+KeyT |  ---  |                Ctrl+Alt+T |                Ctrl+Alt+T |         |
|            Ctrl+Shift+Alt+KeyT |  ---  |          Ctrl+Shift+Alt+T |          Ctrl+Shift+Alt+T |         |
------------------------------------------------------------------------------------------------------------
|                           KeyU |   u   |                         U |                         U |         |
|                     Shift+KeyU |   U   |                   Shift+U |                   Shift+U |         |
|                  Ctrl+Alt+KeyU |  ---  |                Ctrl+Alt+U |                Ctrl+Alt+U |         |
|            Ctrl+Shift+Alt+KeyU |  ---  |          Ctrl+Shift+Alt+U |          Ctrl+Shift+Alt+U |         |
------------------------------------------------------------------------------------------------------------
|                           KeyV |   v   |                         V |                         V |         |
|                     Shift+KeyV |   V   |                   Shift+V |                   Shift+V |         |
|                  Ctrl+Alt+KeyV |  ---  |                Ctrl+Alt+V |                Ctrl+Alt+V |         |
|            Ctrl+Shift+Alt+KeyV |  ---  |          Ctrl+Shift+Alt+V |          Ctrl+Shift+Alt+V |         |
------------------------------------------------------------------------------------------------------------
|                           KeyW |   w   |                         W |                         W |         |
|                     Shift+KeyW |   W   |                   Shift+W |                   Shift+W |         |
|                  Ctrl+Alt+KeyW |   ?   |                Ctrl+Alt+W |                Ctrl+Alt+W |         |
|            Ctrl+Shift+Alt+KeyW |  ---  |          Ctrl+Shift+Alt+W |          Ctrl+Shift+Alt+W |         |
------------------------------------------------------------------------------------------------------------
|                           KeyX |   x   |                         X |                         X |         |
|                     Shift+KeyX |   X   |                   Shift+X |                   Shift+X |         |
|                  Ctrl+Alt+KeyX |  ---  |                Ctrl+Alt+X |                Ctrl+Alt+X |         |
|            Ctrl+Shift+Alt+KeyX |  ---  |          Ctrl+Shift+Alt+X |          Ctrl+Shift+Alt+X |         |
------------------------------------------------------------------------------------------------------------
|       HW Code combination      |  Key  |    KeyCode combination    |          UI label         | WYSIWYG |
------------------------------------------------------------------------------------------------------------
|                           KeyY |   y   |                         Y |                         Y |         |
|                     Shift+KeyY |   Y   |                   Shift+Y |                   Shift+Y |         |
|                  Ctrl+Alt+KeyY |  ---  |                Ctrl+Alt+Y |                Ctrl+Alt+Y |         |
|            Ctrl+Shift+Alt+KeyY |  ---  |          Ctrl+Shift+Alt+Y |          Ctrl+Shift+Alt+Y |         |
------------------------------------------------------------------------------------------------------------
|                           KeyZ |   z   |                         Z |                         Z |         |
|                     Shift+KeyZ |   Z   |                   Shift+Z |                   Shift+Z |         |
|                  Ctrl+Alt+KeyZ |  ---  |                Ctrl+Alt+Z |                Ctrl+Alt+Z |         |
|            Ctrl+Shift+Alt+KeyZ |  ---  |          Ctrl+Shift+Alt+Z |          Ctrl+Shift+Alt+Z |         |
------------------------------------------------------------------------------------------------------------
|                         Digit1 |   1   |                         1 |                         1 |         |
|                   Shift+Digit1 |   !   |                   Shift+1 |                   Shift+1 |         |
|                Ctrl+Alt+Digit1 |   ¹   |                Ctrl+Alt+1 |                Ctrl+Alt+1 |         |
|          Ctrl+Shift+Alt+Digit1 |  ---  |          Ctrl+Shift+Alt+1 |          Ctrl+Shift+Alt+1 |         |
------------------------------------------------------------------------------------------------------------
|                         Digit2 |   2   |                         2 |                         2 |         |
|                   Shift+Digit2 |   @   |                   Shift+2 |                   Shift+2 |         |
|                Ctrl+Alt+Digit2 |   ²   |                Ctrl+Alt+2 |                Ctrl+Alt+2 |         |
|          Ctrl+Shift+Alt+Digit2 |  ---  |          Ctrl+Shift+Alt+2 |          Ctrl+Shift+Alt+2 |         |
------------------------------------------------------------------------------------------------------------
|                         Digit3 |   3   |                         3 |                         3 |         |
|                   Shift+Digit3 |   #   |                   Shift+3 |                   Shift+3 |         |
|                Ctrl+Alt+Digit3 |   ³   |                Ctrl+Alt+3 |                Ctrl+Alt+3 |         |
|          Ctrl+Shift+Alt+Digit3 |  ---  |          Ctrl+Shift+Alt+3 |          Ctrl+Shift+Alt+3 |         |
------------------------------------------------------------------------------------------------------------
|                         Digit4 |   4   |                         4 |                         4 |         |
|                   Shift+Digit4 |   $   |                   Shift+4 |                   Shift+4 |         |
|                Ctrl+Alt+Digit4 |   £   |                Ctrl+Alt+4 |                Ctrl+Alt+4 |         |
|          Ctrl+Shift+Alt+Digit4 |  ---  |          Ctrl+Shift+Alt+4 |          Ctrl+Shift+Alt+4 |         |
------------------------------------------------------------------------------------------------------------
|       HW Code combination      |  Key  |    KeyCode combination    |          UI label         | WYSIWYG |
------------------------------------------------------------------------------------------------------------
|                         Digit5 |   5   |                         5 |                         5 |         |
|                   Shift+Digit5 |   %   |                   Shift+5 |                   Shift+5 |         |
|                Ctrl+Alt+Digit5 |   ¢   |                Ctrl+Alt+5 |                Ctrl+Alt+5 |         |
|          Ctrl+Shift+Alt+Digit5 |  ---  |          Ctrl+Shift+Alt+5 |          Ctrl+Shift+Alt+5 |         |
------------------------------------------------------------------------------------------------------------
|                         Digit6 |   6   |                         6 |                         6 |         |
|                   Shift+Digit6 |   ¨   |                   Shift+6 |                   Shift+6 |         |
|                Ctrl+Alt+Digit6 |   ¬   |                Ctrl+Alt+6 |                Ctrl+Alt+6 |         |
|          Ctrl+Shift+Alt+Digit6 |  ---  |          Ctrl+Shift+Alt+6 |          Ctrl+Shift+Alt+6 |         |
------------------------------------------------------------------------------------------------------------
|                         Digit7 |   7   |                         7 |                         7 |         |
|                   Shift+Digit7 |   &   |                   Shift+7 |                   Shift+7 |         |
|                Ctrl+Alt+Digit7 |  ---  |                Ctrl+Alt+7 |                Ctrl+Alt+7 |         |
|          Ctrl+Shift+Alt+Digit7 |  ---  |          Ctrl+Shift+Alt+7 |          Ctrl+Shift+Alt+7 |         |
------------------------------------------------------------------------------------------------------------
|                         Digit8 |   8   |                         8 |                         8 |         |
|                   Shift+Digit8 |   *   |                   Shift+8 |                   Shift+8 |         |
|                Ctrl+Alt+Digit8 |  ---  |                Ctrl+Alt+8 |                Ctrl+Alt+8 |         |
|          Ctrl+Shift+Alt+Digit8 |  ---  |          Ctrl+Shift+Alt+8 |          Ctrl+Shift+Alt+8 |         |
------------------------------------------------------------------------------------------------------------
|                         Digit9 |   9   |                         9 |                         9 |         |
|                   Shift+Digit9 |   (   |                   Shift+9 |                   Shift+9 |         |
|                Ctrl+Alt+Digit9 |  ---  |                Ctrl+Alt+9 |                Ctrl+Alt+9 |         |
|          Ctrl+Shift+Alt+Digit9 |  ---  |          Ctrl+Shift+Alt+9 |          Ctrl+Shift+Alt+9 |         |
------------------------------------------------------------------------------------------------------------
|                         Digit0 |   0   |                         0 |                         0 |         |
|                   Shift+Digit0 |   )   |                   Shift+0 |                   Shift+0 |         |
|                Ctrl+Alt+Digit0 |  ---  |                Ctrl+Alt+0 |                Ctrl+Alt+0 |         |
|          Ctrl+Shift+Alt+Digit0 |  ---  |          Ctrl+Shift+Alt+0 |          Ctrl+Shift+Alt+0 |         |
------------------------------------------------------------------------------------------------------------
|       HW Code combination      |  Key  |    KeyCode combination    |          UI label         | WYSIWYG |
------------------------------------------------------------------------------------------------------------
|                          Minus |   -   |                         - |                         - |         |
|                    Shift+Minus |   _   |                   Shift+- |                   Shift+- |         |
|                 Ctrl+Alt+Minus |  ---  |                Ctrl+Alt+- |                Ctrl+Alt+- |         |
|           Ctrl+Shift+Alt+Minus |  ---  |          Ctrl+Shift+Alt+- |          Ctrl+Shift+Alt+- |         |
------------------------------------------------------------------------------------------------------------
|                          Equal |   =   |                         = |                         = |         |
|                    Shift+Equal |   +   |                   Shift+= |                   Shift+= |         |
|                 Ctrl+Alt+Equal |   §   |                Ctrl+Alt+= |                Ctrl+Alt+= |         |
|           Ctrl+Shift+Alt+Equal |  ---  |          Ctrl+Shift+Alt+= |          Ctrl+Shift+Alt+= |         |
------------------------------------------------------------------------------------------------------------
|                    BracketLeft |   ´   |                         [ |                         ´ |    NO   |
|              Shift+BracketLeft |   `   |                   Shift+[ |                   Shift+´ |    NO   |
|           Ctrl+Alt+BracketLeft |  ---  |                Ctrl+Alt+[ |                Ctrl+Alt+´ |    NO   |
|     Ctrl+Shift+Alt+BracketLeft |  ---  |          Ctrl+Shift+Alt+[ |          Ctrl+Shift+Alt+´ |    NO   |
------------------------------------------------------------------------------------------------------------
|                   BracketRight |   [   |                         ] |                         [ |    NO   |
|             Shift+BracketRight |   {   |                   Shift+] |                   Shift+[ |    NO   |
|          Ctrl+Alt+BracketRight |   ª   |                Ctrl+Alt+] |                Ctrl+Alt+[ |    NO   |
|    Ctrl+Shift+Alt+BracketRight |  ---  |          Ctrl+Shift+Alt+] |          Ctrl+Shift+Alt+[ |    NO   |
------------------------------------------------------------------------------------------------------------
|                      Backslash |   ]   |                         \ |                         ] |    NO   |
|                Shift+Backslash |   }   |                   Shift+\ |                   Shift+] |    NO   |
|             Ctrl+Alt+Backslash |   º   |                Ctrl+Alt+\ |                Ctrl+Alt+] |    NO   |
|       Ctrl+Shift+Alt+Backslash |  ---  |          Ctrl+Shift+Alt+\ |          Ctrl+Shift+Alt+] |    NO   |
------------------------------------------------------------------------------------------------------------
|                       IntlHash |  ---  |                      null |                      null |    NO   |
|                 Shift+IntlHash |  ---  |                      null |                      null |    NO   |
|              Ctrl+Alt+IntlHash |  ---  |                      null |                      null |    NO   |
|        Ctrl+Shift+Alt+IntlHash |  ---  |                      null |                      null |    NO   |
------------------------------------------------------------------------------------------------------------
|       HW Code combination      |  Key  |    KeyCode combination    |          UI label         | WYSIWYG |
------------------------------------------------------------------------------------------------------------
|                      Semicolon |   ç   |                         ; |                         ç |    NO   |
|                Shift+Semicolon |   Ç   |                   Shift+; |                   Shift+ç |    NO   |
|             Ctrl+Alt+Semicolon |  ---  |                Ctrl+Alt+; |                Ctrl+Alt+ç |    NO   |
|       Ctrl+Shift+Alt+Semicolon |  ---  |          Ctrl+Shift+Alt+; |          Ctrl+Shift+Alt+ç |    NO   |
------------------------------------------------------------------------------------------------------------
|                          Quote |   ~   |                         ' |                         ~ |    NO   |
|                    Shift+Quote |   ^   |                   Shift+' |                   Shift+~ |    NO   |
|                 Ctrl+Alt+Quote |  ---  |                Ctrl+Alt+' |                Ctrl+Alt+~ |    NO   |
|           Ctrl+Shift+Alt+Quote |  ---  |          Ctrl+Shift+Alt+' |          Ctrl+Shift+Alt+~ |    NO   |
------------------------------------------------------------------------------------------------------------
|                      Backquote |   '   |                         ` |                         ' |    NO   |
|                Shift+Backquote |   "   |                   Shift+` |                   Shift+' |    NO   |
|             Ctrl+Alt+Backquote |  ---  |                Ctrl+Alt+` |                Ctrl+Alt+' |    NO   |
|       Ctrl+Shift+Alt+Backquote |  ---  |          Ctrl+Shift+Alt+` |          Ctrl+Shift+Alt+' |    NO   |
------------------------------------------------------------------------------------------------------------
|                          Comma |   ,   |                         , |                         , |         |
|                    Shift+Comma |   <   |                   Shift+, |                   Shift+, |         |
|                 Ctrl+Alt+Comma |  ---  |                Ctrl+Alt+, |                Ctrl+Alt+, |         |
|           Ctrl+Shift+Alt+Comma |  ---  |          Ctrl+Shift+Alt+, |          Ctrl+Shift+Alt+, |         |
------------------------------------------------------------------------------------------------------------
|                         Period |   .   |                         . |                         . |         |
|                   Shift+Period |   >   |                   Shift+. |                   Shift+. |         |
|                Ctrl+Alt+Period |  ---  |                Ctrl+Alt+. |                Ctrl+Alt+. |         |
|          Ctrl+Shift+Alt+Period |  ---  |          Ctrl+Shift+Alt+. |          Ctrl+Shift+Alt+. |         |
------------------------------------------------------------------------------------------------------------
|                          Slash |   ;   |                         / |                         ; |    NO   |
|                    Shift+Slash |   :   |                   Shift+/ |                   Shift+; |    NO   |
|                 Ctrl+Alt+Slash |  ---  |                Ctrl+Alt+/ |                Ctrl+Alt+; |    NO   |
|           Ctrl+Shift+Alt+Slash |  ---  |          Ctrl+Shift+Alt+/ |          Ctrl+Shift+Alt+; |    NO   |
------------------------------------------------------------------------------------------------------------
|       HW Code combination      |  Key  |    KeyCode combination    |          UI label         | WYSIWYG |
------------------------------------------------------------------------------------------------------------
|                        ArrowUp |  ---  |                   UpArrow |                   UpArrow |         |
|                  Shift+ArrowUp |  ---  |             Shift+UpArrow |             Shift+UpArrow |         |
|               Ctrl+Alt+ArrowUp |  ---  |          Ctrl+Alt+UpArrow |          Ctrl+Alt+UpArrow |         |
|         Ctrl+Shift+Alt+ArrowUp |  ---  |    Ctrl+Shift+Alt+UpArrow |    Ctrl+Shift+Alt+UpArrow |         |
------------------------------------------------------------------------------------------------------------
|                        Numpad0 |  ---  |                   NumPad0 |                   NumPad0 |         |
|                  Shift+Numpad0 |  ---  |             Shift+NumPad0 |             Shift+NumPad0 |         |
|               Ctrl+Alt+Numpad0 |  ---  |          Ctrl+Alt+NumPad0 |          Ctrl+Alt+NumPad0 |         |
|         Ctrl+Shift+Alt+Numpad0 |  ---  |    Ctrl+Shift+Alt+NumPad0 |    Ctrl+Shift+Alt+NumPad0 |         |
------------------------------------------------------------------------------------------------------------
|                  IntlBackslash |   \   |                   OEM_102 |                         \ |    NO   |
|            Shift+IntlBackslash |   |   |             Shift+OEM_102 |                   Shift+\ |    NO   |
|         Ctrl+Alt+IntlBackslash |  ---  |          Ctrl+Alt+OEM_102 |                Ctrl+Alt+\ |    NO   |
|   Ctrl+Shift+Alt+IntlBackslash |  ---  |    Ctrl+Shift+Alt+OEM_102 |          Ctrl+Shift+Alt+\ |    NO   |
------------------------------------------------------------------------------------------------------------
|                         IntlRo |   /   |                   ABNT_C1 |                         / |    NO   |
|                   Shift+IntlRo |   ?   |             Shift+ABNT_C1 |                   Shift+/ |    NO   |
|                Ctrl+Alt+IntlRo |   °   |          Ctrl+Alt+ABNT_C1 |                Ctrl+Alt+/ |    NO   |
|          Ctrl+Shift+Alt+IntlRo |  ---  |    Ctrl+Shift+Alt+ABNT_C1 |          Ctrl+Shift+Alt+/ |    NO   |
------------------------------------------------------------------------------------------------------------
|                        IntlYen |  ---  |                      null |                      null |    NO   |
|                  Shift+IntlYen |  ---  |                      null |                      null |    NO   |
|               Ctrl+Alt+IntlYen |  ---  |                      null |                      null |    NO   |
|         Ctrl+Shift+Alt+IntlYen |  ---  |                      null |                      null |    NO   |
------------------------------------------------------------------------------------------------------------

Raw mapping:
{
	"Sleep": {
		"vkey": "VK_SLEEP",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"WakeUp": {
		"vkey": "VK_UNKNOWN",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"KeyA": {
		"vkey": "VK_A",
		"value": "a",
		"withShift": "A",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"KeyB": {
		"vkey": "VK_B",
		"value": "b",
		"withShift": "B",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"KeyC": {
		"vkey": "VK_C",
		"value": "c",
		"withShift": "C",
		"withAltGr": "₢",
		"withShiftAltGr": ""
	},
	"KeyD": {
		"vkey": "VK_D",
		"value": "d",
		"withShift": "D",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"KeyE": {
		"vkey": "VK_E",
		"value": "e",
		"withShift": "E",
		"withAltGr": "°",
		"withShiftAltGr": ""
	},
	"KeyF": {
		"vkey": "VK_F",
		"value": "f",
		"withShift": "F",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"KeyG": {
		"vkey": "VK_G",
		"value": "g",
		"withShift": "G",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"KeyH": {
		"vkey": "VK_H",
		"value": "h",
		"withShift": "H",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"KeyI": {
		"vkey": "VK_I",
		"value": "i",
		"withShift": "I",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"KeyJ": {
		"vkey": "VK_J",
		"value": "j",
		"withShift": "J",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"KeyK": {
		"vkey": "VK_K",
		"value": "k",
		"withShift": "K",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"KeyL": {
		"vkey": "VK_L",
		"value": "l",
		"withShift": "L",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"KeyM": {
		"vkey": "VK_M",
		"value": "m",
		"withShift": "M",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"KeyN": {
		"vkey": "VK_N",
		"value": "n",
		"withShift": "N",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"KeyO": {
		"vkey": "VK_O",
		"value": "o",
		"withShift": "O",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"KeyP": {
		"vkey": "VK_P",
		"value": "p",
		"withShift": "P",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"KeyQ": {
		"vkey": "VK_Q",
		"value": "q",
		"withShift": "Q",
		"withAltGr": "/",
		"withShiftAltGr": ""
	},
	"KeyR": {
		"vkey": "VK_R",
		"value": "r",
		"withShift": "R",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"KeyS": {
		"vkey": "VK_S",
		"value": "s",
		"withShift": "S",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"KeyT": {
		"vkey": "VK_T",
		"value": "t",
		"withShift": "T",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"KeyU": {
		"vkey": "VK_U",
		"value": "u",
		"withShift": "U",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"KeyV": {
		"vkey": "VK_V",
		"value": "v",
		"withShift": "V",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"KeyW": {
		"vkey": "VK_W",
		"value": "w",
		"withShift": "W",
		"withAltGr": "?",
		"withShiftAltGr": ""
	},
	"KeyX": {
		"vkey": "VK_X",
		"value": "x",
		"withShift": "X",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"KeyY": {
		"vkey": "VK_Y",
		"value": "y",
		"withShift": "Y",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"KeyZ": {
		"vkey": "VK_Z",
		"value": "z",
		"withShift": "Z",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Digit1": {
		"vkey": "VK_1",
		"value": "1",
		"withShift": "!",
		"withAltGr": "¹",
		"withShiftAltGr": ""
	},
	"Digit2": {
		"vkey": "VK_2",
		"value": "2",
		"withShift": "@",
		"withAltGr": "²",
		"withShiftAltGr": ""
	},
	"Digit3": {
		"vkey": "VK_3",
		"value": "3",
		"withShift": "#",
		"withAltGr": "³",
		"withShiftAltGr": ""
	},
	"Digit4": {
		"vkey": "VK_4",
		"value": "4",
		"withShift": "$",
		"withAltGr": "£",
		"withShiftAltGr": ""
	},
	"Digit5": {
		"vkey": "VK_5",
		"value": "5",
		"withShift": "%",
		"withAltGr": "¢",
		"withShiftAltGr": ""
	},
	"Digit6": {
		"vkey": "VK_6",
		"value": "6",
		"withShift": "¨",
		"withAltGr": "¬",
		"withShiftAltGr": ""
	},
	"Digit7": {
		"vkey": "VK_7",
		"value": "7",
		"withShift": "&",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Digit8": {
		"vkey": "VK_8",
		"value": "8",
		"withShift": "*",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Digit9": {
		"vkey": "VK_9",
		"value": "9",
		"withShift": "(",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Digit0": {
		"vkey": "VK_0",
		"value": "0",
		"withShift": ")",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Enter": {
		"vkey": "VK_RETURN",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Escape": {
		"vkey": "VK_ESCAPE",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Backspace": {
		"vkey": "VK_BACK",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Tab": {
		"vkey": "VK_TAB",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Space": {
		"vkey": "VK_SPACE",
		"value": " ",
		"withShift": " ",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Minus": {
		"vkey": "VK_OEM_MINUS",
		"value": "-",
		"withShift": "_",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Equal": {
		"vkey": "VK_OEM_PLUS",
		"value": "=",
		"withShift": "+",
		"withAltGr": "§",
		"withShiftAltGr": ""
	},
	"BracketLeft": {
		"vkey": "VK_OEM_4",
		"value": "´",
		"withShift": "`",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"BracketRight": {
		"vkey": "VK_OEM_6",
		"value": "[",
		"withShift": "{",
		"withAltGr": "ª",
		"withShiftAltGr": ""
	},
	"Backslash": {
		"vkey": "VK_OEM_5",
		"value": "]",
		"withShift": "}",
		"withAltGr": "º",
		"withShiftAltGr": ""
	},
	"Semicolon": {
		"vkey": "VK_OEM_1",
		"value": "ç",
		"withShift": "Ç",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Quote": {
		"vkey": "VK_OEM_7",
		"value": "~",
		"withShift": "^",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Backquote": {
		"vkey": "VK_OEM_3",
		"value": "'",
		"withShift": "\"",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Comma": {
		"vkey": "VK_OEM_COMMA",
		"value": ",",
		"withShift": "<",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Period": {
		"vkey": "VK_OEM_PERIOD",
		"value": ".",
		"withShift": ">",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Slash": {
		"vkey": "VK_OEM_2",
		"value": ";",
		"withShift": ":",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"CapsLock": {
		"vkey": "VK_CAPITAL",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"F1": {
		"vkey": "VK_F1",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"F2": {
		"vkey": "VK_F2",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"F3": {
		"vkey": "VK_F3",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"F4": {
		"vkey": "VK_F4",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"F5": {
		"vkey": "VK_F5",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"F6": {
		"vkey": "VK_F6",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"F7": {
		"vkey": "VK_F7",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"F8": {
		"vkey": "VK_F8",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"F9": {
		"vkey": "VK_F9",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"F10": {
		"vkey": "VK_F10",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"F11": {
		"vkey": "VK_F11",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"F12": {
		"vkey": "VK_F12",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"PrintScreen": {
		"vkey": "VK_SNAPSHOT",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"ScrollLock": {
		"vkey": "VK_SCROLL",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Pause": {
		"vkey": "VK_NUMLOCK",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Insert": {
		"vkey": "VK_INSERT",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Home": {
		"vkey": "VK_HOME",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"PageUp": {
		"vkey": "VK_PRIOR",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Delete": {
		"vkey": "VK_DELETE",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"End": {
		"vkey": "VK_END",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"PageDown": {
		"vkey": "VK_NEXT",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"ArrowRight": {
		"vkey": "VK_RIGHT",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"ArrowLeft": {
		"vkey": "VK_LEFT",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"ArrowDown": {
		"vkey": "VK_DOWN",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"ArrowUp": {
		"vkey": "VK_UP",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"NumLock": {
		"vkey": "VK_UNKNOWN",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"NumpadDivide": {
		"vkey": "VK_DIVIDE",
		"value": "/",
		"withShift": "/",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"NumpadMultiply": {
		"vkey": "VK_MULTIPLY",
		"value": "*",
		"withShift": "*",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"NumpadSubtract": {
		"vkey": "VK_SUBTRACT",
		"value": "-",
		"withShift": "-",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"NumpadAdd": {
		"vkey": "VK_ADD",
		"value": "+",
		"withShift": "+",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"NumpadEnter": {
		"vkey": "VK_RETURN",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Numpad1": {
		"vkey": "VK_END",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Numpad2": {
		"vkey": "VK_DOWN",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Numpad3": {
		"vkey": "VK_NEXT",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Numpad4": {
		"vkey": "VK_LEFT",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Numpad5": {
		"vkey": "VK_CLEAR",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Numpad6": {
		"vkey": "VK_RIGHT",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Numpad7": {
		"vkey": "VK_HOME",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Numpad8": {
		"vkey": "VK_UP",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Numpad9": {
		"vkey": "VK_PRIOR",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Numpad0": {
		"vkey": "VK_INSERT",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"NumpadDecimal": {
		"vkey": "VK_DELETE",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"IntlBackslash": {
		"vkey": "VK_OEM_102",
		"value": "\\",
		"withShift": "|",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"ContextMenu": {
		"vkey": "VK_APPS",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Power": {
		"vkey": "VK_UNKNOWN",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"NumpadEqual": {
		"vkey": "VK_CLEAR",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"F13": {
		"vkey": "VK_F13",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"F14": {
		"vkey": "VK_F14",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"F15": {
		"vkey": "VK_F15",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"F16": {
		"vkey": "VK_F16",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"F17": {
		"vkey": "VK_F17",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"F18": {
		"vkey": "VK_F18",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"F19": {
		"vkey": "VK_F19",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"F20": {
		"vkey": "VK_F20",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"F21": {
		"vkey": "VK_F21",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"F22": {
		"vkey": "VK_F22",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"F23": {
		"vkey": "VK_F23",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"F24": {
		"vkey": "VK_F24",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Help": {
		"vkey": "VK_UNKNOWN",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Undo": {
		"vkey": "VK_UNKNOWN",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Cut": {
		"vkey": "VK_UNKNOWN",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Copy": {
		"vkey": "VK_UNKNOWN",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Paste": {
		"vkey": "VK_UNKNOWN",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"AudioVolumeMute": {
		"vkey": "VK_VOLUME_MUTE",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"AudioVolumeUp": {
		"vkey": "VK_VOLUME_UP",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"AudioVolumeDown": {
		"vkey": "VK_VOLUME_DOWN",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"NumpadComma": {
		"vkey": "VK_ABNT_C2",
		"value": ".",
		"withShift": ".",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"IntlRo": {
		"vkey": "VK_ABNT_C1",
		"value": "/",
		"withShift": "?",
		"withAltGr": "°",
		"withShiftAltGr": ""
	},
	"KanaMode": {
		"vkey": "VK_UNKNOWN",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"IntlYen": {
		"vkey": "VK_UNKNOWN",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Convert": {
		"vkey": "VK_UNKNOWN",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"NonConvert": {
		"vkey": "VK_UNKNOWN",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Lang1": {
		"vkey": "VK_UNKNOWN",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Lang2": {
		"vkey": "VK_UNKNOWN",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Lang3": {
		"vkey": "VK_UNKNOWN",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Lang4": {
		"vkey": "VK_UNKNOWN",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"ControlLeft": {
		"vkey": "VK_CONTROL",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"ShiftLeft": {
		"vkey": "VK_SHIFT",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"AltLeft": {
		"vkey": "VK_MENU",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"MetaLeft": {
		"vkey": "VK_LWIN",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"ControlRight": {
		"vkey": "VK_CONTROL",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"ShiftRight": {
		"vkey": "VK_SHIFT",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"AltRight": {
		"vkey": "VK_MENU",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"MetaRight": {
		"vkey": "VK_RWIN",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"MediaTrackNext": {
		"vkey": "VK_MEDIA_NEXT_TRACK",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"MediaTrackPrevious": {
		"vkey": "VK_MEDIA_PREV_TRACK",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"MediaStop": {
		"vkey": "VK_MEDIA_STOP",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"Eject": {
		"vkey": "VK_UNKNOWN",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"MediaPlayPause": {
		"vkey": "VK_MEDIA_PLAY_PAUSE",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"MediaSelect": {
		"vkey": "VK_LAUNCH_MEDIA_SELECT",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"LaunchMail": {
		"vkey": "VK_LAUNCH_MAIL",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"LaunchApp2": {
		"vkey": "VK_LAUNCH_APP2",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"LaunchApp1": {
		"vkey": "VK_LAUNCH_APP1",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"BrowserSearch": {
		"vkey": "VK_BROWSER_SEARCH",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"BrowserHome": {
		"vkey": "VK_BROWSER_HOME",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"BrowserBack": {
		"vkey": "VK_BROWSER_BACK",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"BrowserForward": {
		"vkey": "VK_BROWSER_FORWARD",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"BrowserStop": {
		"vkey": "VK_BROWSER_STOP",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"BrowserRefresh": {
		"vkey": "VK_BROWSER_REFRESH",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	},
	"BrowserFavorites": {
		"vkey": "VK_BROWSER_FAVORITES",
		"value": "",
		"withShift": "",
		"withAltGr": "",
		"withShiftAltGr": ""
	}
}

@alexdima
Copy link
Member

The difference between the input box and the rendered key under the input box is ... confusing, but expected. The input box represents the keyCode and the rendered key under the input box represents the key label as it should appear on the keyboard ...

From looking at your gif and correlating with the keybinding data:

------------------------------------------------------------------------------------------------------------
|       HW Code combination      |  Key  |    KeyCode combination    |          UI label         | WYSIWYG |
------------------------------------------------------------------------------------------------------------
|                    BracketLeft |   ´   |                         [ |                         ´ |    NO   |
|                   BracketRight |   [   |                         ] |                         [ |    NO   |
|                      Semicolon |   ç   |                         ; |                         ç |    NO   |

  • when you press the scan code [BracketLeft]:

  • keyCode is [ aka VK_OEM_4 and produces `

  • when you press the scan code [BracketRight]:

  • keyCode is ] aka VK_OEM_6 and produces [

  • when you press the scan code [Semicolon]:

  • keyCode is ; aka VK_OEM_1 and produces ç

.. etc

This is very confusing, I agree, and perhaps we should always use the symbolic names inside the input box in such cases, such as VK_OEM_4, but as far as I understand, this works. i.e. you can press your desired key combination and it gets recorded, it gets serialized to the keybindings.json file if you accept it and you can assign a command to it. Then, when you press the same key combination, the action executes.

The two keys looks very funny indeed, perhaps the widget thinks it goes into a chord.

So I think the action for me here would be to use the symbolic names in the <input> box to avoid confusion... Otherwise things are working, right?

@Tekbr
Copy link
Author

Tekbr commented May 18, 2017

This is very confusing, I agree, and perhaps we should always use the symbolic names inside the input box in such cases, such as VK_OEM_4, but as far as I understand, this works. i.e. you can press your desired key combination and it gets recorded, it gets serialized to the keybindings.json file if you accept it and you can assign a command to it. Then, when you press the same key combination, the action executes.

The two keys looks very funny indeed, perhaps the widget thinks it goes into a chord.

So I think the action for me here would be to use the symbolic names in the <input> box to avoid confusion... Otherwise things are working, right?

-- Sorry for the English, I used Google Translator --

@alexandrudima, I did not quite understand.

But the ideal is if I pressed ç it should show ç, if I pressed [ it should show [.

As for a problem I mentioned in the previous comment (clicking on [ or ]) is difficult without a real keyboard, because it puts the combination on the screen once. But you can get an idea of what I'm talking about using the virtual keyboard.

Then do the steps according to the gif.

comandokey2

On the virtual keyboard the ´expects a letter, but not the actual one. That is the main difference.
On the real keyboard, the [ or ] button on the VSCode will display two combinations instead of one, in my view, by blending the Brazilian keyboard with the American.

And yes, now I can set the keys.


But look closely at this situation. Please tell me if this is a new issue.

I may be expressing myself wrong, but in my view:

 - Before its correction: VSCode did not know and did not understand the Brazilian keyboard.
 
 - After its correction: VSCode knows the Brazilian keyboard but still does not understand.

What do I mean by that? (This may apply to other types of keyboard and not just the Brazilian)

The default shortcut for Toogle Line Comment by default of VSCode according to the site is Ctrl + /, right? (It's on the VSCode website)

Does the key exist on my keyboard? Yes there is.

Is she in a different place than the American keyboard? Yes, it's in a different place.

What VSCode is doing:
Is there a key? Yes.
Is it the same as the American keyboard? Do not.
Then I will associate the key that is in her place.

For me this is not right. What it should do:
Is there a key? Yes.
Is it the same as the American keyboard? Do not.
Is she somewhere else? Yes.
Find her and that's it. And I keep the same shortcut.

For when the key does not exist. What to do: (I do not know if the same does it)
Is there a key? Do not.
Here's the question: Is VSCode set to create another shortcut?

comandokey3

How hard is that to fix? Do not know. But it's an important point yes.
Other programs generally can find where the key is on my keyboard, even if I change the language preference.

@alexandrudima Maybe it got a bit confusing. Let me know what you could understand or what you could not understand.

@alexdima
Copy link
Member

I have documented in great detail the way keybindings work in VS Code at https://github.com/Microsoft/vscode/wiki/Keybindings#ecode-ekeycode-and-ekey (starting with the section labeled e.code, e.keyCode and e.key)

VS Code does not ship with keyboard layout specific default keybindings. This is something that you can upvote in #1240

The website shows the keybindings as they are on the US standard keyboard layout.

Here is what is happening on Windows on your keyboard layout with the default keybinding for Toggle Line Comment:

  • Out of the box the keybinding for Toggle Line Comment is bound to ctrl + VK_OEM_2, where VK_OEM_2 is a virtual key as defined by Windows. (more explanations in the wiki I linked to above).
  • It is no coincidence, that under the US standard keyboard layout, the scan code [Slash] is mapped to the virtual key VK_OEM_2 which produces /. So under the US standard keyboard layout, the toggle line comment is ctrl+/.
  • But this will not be the case in all other keyboard layouts. For example, from your attached mappings above, under your keyboard layout, VK_OEM_2 produces ;.
  • In this case, out-of-the-box we will have ctrl+; for toggle line comment on your keyboard layout.
  • Please note that this is the same ctrl + VK_OEM_2.
  • The question is: do we present everywhere in the product that toggle line comment is bound to ctrl+; on your keyboard layout, and I believe we do.

Regarding the pressing of the `, I believe the native <input> field does not respect our call of preventDefault in case of dead keys. I will have to look into that. I have extracted #26945 to always use the VK symbolic name in such cases.

@Tekbr
Copy link
Author

Tekbr commented May 22, 2017

Ok @alexandrudima . I think the biggest problem was recognizing the keys. So let's move on slowly.

As for me pushing ´, the problem still continues.
Steps:
1- Open Defines keybinding
2 - Press ´.
3- Click Define keybinding.
4- Press [.

Now it shows oem_6[.

I commented on both issues(#26945) because I was in doubt on which to track

@alexdima
Copy link
Member

Extracted last comment to #27088

@roblourens
Copy link
Member

I tried to understand what needs to be verified, but I give up :)

@alexdima
Copy link
Member

alexdima commented Jun 7, 2017

To verify, bring up the on screen keyboard on Windows with the Brazilian Portuguese keyboard layout. It should look something like this:

port

Then press the / key while defining a keybinding. If possible, also press the . key located on the numpad. It should be recognized by VS Code.

@roblourens roblourens added the verified Verification succeeded label Jun 7, 2017
@vscodebot vscodebot bot locked and limited conversation to collaborators Nov 18, 2017
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
bug Issue identified by VS Code Team member as probable bug keybindings VS Code keybinding issues keyboard-layout Keyboard layout issues verified Verification succeeded windows VS Code on Windows issues
Projects
None yet
Development

No branches or pull requests

3 participants