Skip to content

Commit

Permalink
Fixes #983: Add support for numpad keys
Browse files Browse the repository at this point in the history
  • Loading branch information
alexdima committed Dec 11, 2015
1 parent 646343c commit f0f71be
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 34 deletions.
16 changes: 16 additions & 0 deletions src/vs/base/browser/keyboardEvent.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,22 @@ let KEY_CODE_MAP: {[keyCode:number]:KeyCode} = {};

KEY_CODE_MAP[93] = KeyCode.ContextMenu;

KEY_CODE_MAP[96] = KeyCode.NUMPAD_0;
KEY_CODE_MAP[97] = KeyCode.NUMPAD_1;
KEY_CODE_MAP[98] = KeyCode.NUMPAD_2;
KEY_CODE_MAP[99] = KeyCode.NUMPAD_3;
KEY_CODE_MAP[100] = KeyCode.NUMPAD_4;
KEY_CODE_MAP[101] = KeyCode.NUMPAD_5;
KEY_CODE_MAP[102] = KeyCode.NUMPAD_6;
KEY_CODE_MAP[103] = KeyCode.NUMPAD_7;
KEY_CODE_MAP[104] = KeyCode.NUMPAD_8;
KEY_CODE_MAP[105] = KeyCode.NUMPAD_9;
KEY_CODE_MAP[106] = KeyCode.NUMPAD_MULTIPLY;
KEY_CODE_MAP[107] = KeyCode.NUMPAD_ADD;
KEY_CODE_MAP[109] = KeyCode.NUMPAD_SUBTRACT;
KEY_CODE_MAP[110] = KeyCode.NUMPAD_DECIMAL;
KEY_CODE_MAP[111] = KeyCode.NUMPAD_DIVIDE;

KEY_CODE_MAP[112] = KeyCode.F1;
KEY_CODE_MAP[113] = KeyCode.F2;
KEY_CODE_MAP[114] = KeyCode.F3;
Expand Down
45 changes: 45 additions & 0 deletions src/vs/base/common/keyCodes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,24 @@ export enum KeyCode {
*/
US_QUOTE,

NUMPAD_0, // VK_NUMPAD0, 0x60, Numeric keypad 0 key
NUMPAD_1, // VK_NUMPAD1, 0x61, Numeric keypad 1 key
NUMPAD_2, // VK_NUMPAD2, 0x62, Numeric keypad 2 key
NUMPAD_3, // VK_NUMPAD3, 0x63, Numeric keypad 3 key
NUMPAD_4, // VK_NUMPAD4, 0x64, Numeric keypad 4 key
NUMPAD_5, // VK_NUMPAD5, 0x65, Numeric keypad 5 key
NUMPAD_6, // VK_NUMPAD6, 0x66, Numeric keypad 6 key
NUMPAD_7, // VK_NUMPAD7, 0x67, Numeric keypad 7 key
NUMPAD_8, // VK_NUMPAD8, 0x68, Numeric keypad 8 key
NUMPAD_9, // VK_NUMPAD9, 0x69, Numeric keypad 9 key

NUMPAD_MULTIPLY, // VK_MULTIPLY, 0x6A, Multiply key
NUMPAD_ADD, // VK_ADD, 0x6B, Add key
// NUMPAD_SEPARATOR, // VK_SEPARATOR, 0x6C, Separator key
NUMPAD_SUBTRACT, // VK_SUBTRACT, 0x6D, Subtract key
NUMPAD_DECIMAL, // VK_DECIMAL, 0x6E, Decimal key
NUMPAD_DIVIDE, // VK_DIVIDE, 0x6F,

/**
* Placed last to cover the length of the enum.
*/
Expand Down Expand Up @@ -240,13 +258,40 @@ let TO_STRING_MAP: string[] = [];
TO_STRING_MAP[KeyCode.US_BACKSLASH] = '\\';
TO_STRING_MAP[KeyCode.US_CLOSE_SQUARE_BRACKET] = ']';
TO_STRING_MAP[KeyCode.US_QUOTE] = '\'';

TO_STRING_MAP[KeyCode.NUMPAD_0] = 'NumPad0';
TO_STRING_MAP[KeyCode.NUMPAD_1] = 'NumPad1';
TO_STRING_MAP[KeyCode.NUMPAD_2] = 'NumPad2';
TO_STRING_MAP[KeyCode.NUMPAD_3] = 'NumPad3';
TO_STRING_MAP[KeyCode.NUMPAD_4] = 'NumPad4';
TO_STRING_MAP[KeyCode.NUMPAD_5] = 'NumPad5';
TO_STRING_MAP[KeyCode.NUMPAD_6] = 'NumPad6';
TO_STRING_MAP[KeyCode.NUMPAD_7] = 'NumPad7';
TO_STRING_MAP[KeyCode.NUMPAD_8] = 'NumPad8';
TO_STRING_MAP[KeyCode.NUMPAD_9] = 'NumPad9';

TO_STRING_MAP[KeyCode.NUMPAD_MULTIPLY] = 'NumPad_Multiply';
TO_STRING_MAP[KeyCode.NUMPAD_ADD] = 'NumPad_Add';
TO_STRING_MAP[KeyCode.NUMPAD_SUBTRACT] = 'NumPad_Subtract';
TO_STRING_MAP[KeyCode.NUMPAD_DECIMAL] = 'NumPad_Decimal';
TO_STRING_MAP[KeyCode.NUMPAD_DIVIDE] = 'NumPad_Divide';

// for (let i = 0; i < KeyCode.MAX_VALUE; i++) {
// if (!TO_STRING_MAP[i]) {
// console.warn('Missing string representation for ' + KeyCode[i]);
// }
// }
})();

let FROM_STRING_MAP: {[str:string]:KeyCode;} = {};
FROM_STRING_MAP['\r'] = KeyCode.Enter;
(function() {
for (let i = 0, len = TO_STRING_MAP.length; i < len; i++) {
if (!TO_STRING_MAP[i]) {
continue;
}
FROM_STRING_MAP[TO_STRING_MAP[i]] = i;
FROM_STRING_MAP[TO_STRING_MAP[i].toLowerCase()] = i;
}
})();

Expand Down
35 changes: 1 addition & 34 deletions src/vs/platform/keybinding/common/commonKeybindingResolver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -478,7 +478,7 @@ export class IOSupport {
key = input;
}

let keyCode = KeyCode.fromString(IOSupport.capitalizeKey(key));
let keyCode = KeyCode.fromString(key);

let result = 0;
if (ctrlCmd) {
Expand All @@ -497,39 +497,6 @@ export class IOSupport {
return KeyMod.chord(result, chord);
}

private static capitalizeKey(key: string): string {
if (!key || key.length === 0) {
return key;
}

switch (key) {
case 'pausebreak':
return 'PauseBreak';
case 'capslock':
return 'CapsLock';
case 'pageup':
return 'PageUp';
case 'pagedown':
return 'PageDown';
case 'leftarrow':
return 'LeftArrow';
case 'uparrow':
return 'UpArrow';
case 'rightarrow':
return 'RightArrow';
case 'downarrow':
return 'DownArrow';
case 'contextmenu':
return 'ContextMenu';
case 'numlock':
return 'NumLock';
case 'scrolllock':
return 'ScrollLock';
}

return key.charAt(0).toUpperCase() + key.substr(1);
}

private static writeKeybindingContexts(out: OutputBuilder, context: IKeybindingContextRule[]): void {
var lastCtxIndex = context.length - 1;
context.forEach((c, i) => {
Expand Down

0 comments on commit f0f71be

Please sign in to comment.