Skip to content

Commit

Permalink
First cut at integrating keyboard mappers
Browse files Browse the repository at this point in the history
  • Loading branch information
alexdima committed Mar 20, 2017
1 parent 8dc5a60 commit d102396
Show file tree
Hide file tree
Showing 10 changed files with 71 additions and 667 deletions.
6 changes: 3 additions & 3 deletions npm-shrinkwrap.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Expand Up @@ -30,7 +30,7 @@
"https-proxy-agent": "0.3.6",
"iconv-lite": "0.4.15",
"minimist": "1.2.0",
"native-keymap": "0.4.0",
"native-keymap": "1.1.0",
"node-pty": "0.6.2",
"semver": "4.3.6",
"v8-profiler": "jrieken/v8-profiler#vscode",
Expand Down
31 changes: 28 additions & 3 deletions src/typings/native-keymap.d.ts
Expand Up @@ -5,15 +5,40 @@

declare module 'native-keymap' {

export interface INativeKeyMap {
key_code: string;
export interface IWindowsKeyMapping {
vkey: string;
value: string;
withShift: string;
withAltGr: string;
withShiftAltGr: string;
}
export interface IWindowsKeyboardMapping {
[code: string]: IWindowsKeyMapping;
}
export interface ILinuxKeyMapping {
value: string;
withShift: string;
withAltGr: string;
withShiftAltGr: string;
}
export interface ILinuxKeyboardMapping {
[code: string]: ILinuxKeyMapping;
}
export interface IMacKeyMapping {
value: string;
withShift: string;
withAltGr: string;
withShiftAltGr: string;
valueIsDeadKey: boolean;
withShiftIsDeadKey: boolean;
withAltGrIsDeadKey: boolean;
withShiftAltGrIsDeadKey: boolean;
}
export interface IMacKeyboardMapping {
[code: string]: IMacKeyMapping;
}

export function getKeyMap(): INativeKeyMap[];
export function getKeyMap(): IWindowsKeyboardMapping | ILinuxKeyboardMapping | IMacKeyboardMapping;

export interface IWindowsKeyboardLayoutInfo {
name: string;
Expand Down
12 changes: 2 additions & 10 deletions src/vs/base/browser/keyboardEvent.ts
Expand Up @@ -148,23 +148,15 @@ let KEY_CODE_MAP: { [keyCode: number]: KeyCode } = {};
}
})();

export function lookupKeyCode(e: KeyboardEvent): KeyCode {
return KEY_CODE_MAP[e.keyCode] || KeyCode.Unknown;
}

let extractKeyCode = function extractKeyCode(e: KeyboardEvent): KeyCode {
function extractKeyCode(e: KeyboardEvent): KeyCode {
if (e.charCode) {
// "keypress" events mostly
let char = String.fromCharCode(e.charCode).toUpperCase();
return KeyCodeUtils.fromString(char);
}
return lookupKeyCode(e);
return KEY_CODE_MAP[e.keyCode] || KeyCode.Unknown;
};

export function setExtractKeyCode(newExtractKeyCode: (e: KeyboardEvent) => KeyCode): void {
extractKeyCode = newExtractKeyCode;
}

export interface IKeyboardEvent {
readonly browserEvent: KeyboardEvent;
readonly target: HTMLElement;
Expand Down
Expand Up @@ -14,7 +14,7 @@ import { UILabelProvider, AriaLabelProvider, UserSettingsLabelProvider, Electron
import { IKeyboardMapper } from 'vs/workbench/services/keybinding/common/keyboardMapper';
import { IKeyboardEvent } from 'vs/platform/keybinding/common/keybinding';

export interface IKeyMapping {
export interface IMacLinuxKeyMapping {
value: string;
withShift: string;
withAltGr: string;
Expand All @@ -26,8 +26,8 @@ export interface IKeyMapping {
withShiftAltGrIsDeadKey?: boolean;
}

export interface IKeyboardMapping {
[code: string]: IKeyMapping;
export interface IMacLinuxKeyboardMapping {
[code: string]: IMacLinuxKeyMapping;
}

const LOG = false;
Expand Down Expand Up @@ -160,7 +160,7 @@ export class MacLinuxKeyboardMapper implements IKeyboardMapper {
private readonly _hwToDispatch: string[] = [];
private readonly _kbToHw: number[][] = [];

constructor(rawMappings: IKeyboardMapping, OS: OperatingSystem) {
constructor(rawMappings: IMacLinuxKeyboardMapping, OS: OperatingSystem) {

this._OS = OS;

Expand Down
Expand Up @@ -14,16 +14,16 @@ import { IHTMLContentElement } from 'vs/base/common/htmlContent';
import { IKeyboardMapper } from 'vs/workbench/services/keybinding/common/keyboardMapper';
import { IKeyboardEvent } from 'vs/platform/keybinding/common/keybinding';

export interface IKeyMapping {
export interface IWindowsKeyMapping {
vkey: string;
value: string;
withShift: string;
withAltGr: string;
withShiftAltGr: string;
}

export interface IKeyboardMapping {
[code: string]: IKeyMapping;
export interface IWindowsKeyboardMapping {
[code: string]: IWindowsKeyMapping;
}

const LOG = false;
Expand Down Expand Up @@ -182,7 +182,7 @@ export class WindowsKeyboardMapper implements IKeyboardMapper {
private readonly _kbToLabel: string[] = [];
private readonly _kbExists: boolean[];

constructor(rawMappings: IKeyboardMapping) {
constructor(rawMappings: IWindowsKeyboardMapping) {
this._hwToKb = [];
this._kbToLabel = [];
this._kbExists = [];
Expand Down

0 comments on commit d102396

Please sign in to comment.