mirror of
https://github.com/microsoft/vscode.git
synced 2026-09-30 18:46:00 +01:00
More edge cases
This commit is contained in:
@@ -306,6 +306,7 @@ let STRING = createMapping((TO_STRING_MAP) => {
|
||||
TO_STRING_MAP[KeyCode.KEY_Y] = 'Y';
|
||||
TO_STRING_MAP[KeyCode.KEY_Z] = 'Z';
|
||||
|
||||
TO_STRING_MAP[KeyCode.Meta] = 'Meta';
|
||||
TO_STRING_MAP[KeyCode.ContextMenu] = 'ContextMenu';
|
||||
|
||||
TO_STRING_MAP[KeyCode.F1] = 'F1';
|
||||
|
||||
@@ -177,7 +177,7 @@ export class MacLinuxKeyboardMapper implements IKeyboardMapper {
|
||||
if (immutableKeyCode === KeyCode.Unknown || immutableKeyCode === KeyCode.Ctrl || immutableKeyCode === KeyCode.Meta || immutableKeyCode === KeyCode.Alt || immutableKeyCode === KeyCode.Shift) {
|
||||
this._hwToDispatch[code] = null; // cannot dispatch on this hw code
|
||||
} else {
|
||||
this._hwToDispatch[code] = KeyCodeUtils.toString(immutableKeyCode);
|
||||
this._hwToDispatch[code] = `[${KeyboardEventCodeUtils.toString(code)}]`;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -377,8 +377,11 @@ export class MacLinuxKeyboardMapper implements IKeyboardMapper {
|
||||
|
||||
this._hwToKb[hwEncoded] = kbEncoded;
|
||||
|
||||
this._kbToHw[kbEncoded] = this._kbToHw[kbEncoded] || [];
|
||||
this._kbToHw[kbEncoded].unshift(hwEncoded);
|
||||
if (keyCode !== KeyCode.Unknown) {
|
||||
// Do not save an inverse lookup for Unknown
|
||||
this._kbToHw[kbEncoded] = this._kbToHw[kbEncoded] || [];
|
||||
this._kbToHw[kbEncoded].unshift(hwEncoded);
|
||||
}
|
||||
}
|
||||
|
||||
private _registerAllCombos1(
|
||||
@@ -568,6 +571,22 @@ export class MacLinuxKeyboardMapper implements IKeyboardMapper {
|
||||
}
|
||||
|
||||
private _getStableKeyCodeForHWCode(code: KeyboardEventCode): KeyCode {
|
||||
if (code >= KeyboardEventCode.Digit1 && code <= KeyboardEventCode.Digit0) {
|
||||
// digits are ok
|
||||
switch (code) {
|
||||
case KeyboardEventCode.Digit1: return KeyCode.KEY_1;
|
||||
case KeyboardEventCode.Digit2: return KeyCode.KEY_2;
|
||||
case KeyboardEventCode.Digit3: return KeyCode.KEY_3;
|
||||
case KeyboardEventCode.Digit4: return KeyCode.KEY_4;
|
||||
case KeyboardEventCode.Digit5: return KeyCode.KEY_5;
|
||||
case KeyboardEventCode.Digit6: return KeyCode.KEY_6;
|
||||
case KeyboardEventCode.Digit7: return KeyCode.KEY_7;
|
||||
case KeyboardEventCode.Digit8: return KeyCode.KEY_8;
|
||||
case KeyboardEventCode.Digit9: return KeyCode.KEY_9;
|
||||
case KeyboardEventCode.Digit0: return KeyCode.KEY_0;
|
||||
}
|
||||
}
|
||||
|
||||
// Check if this hw code always maps to the same kb code and back
|
||||
let constantKeyCode: KeyCode = -1;
|
||||
for (let mod = 0; mod < 8; mod++) {
|
||||
@@ -575,6 +594,11 @@ export class MacLinuxKeyboardMapper implements IKeyboardMapper {
|
||||
const kbEncoded = this._hwToKb[hwEncoded];
|
||||
const keyCode = (kbEncoded >>> 3);
|
||||
|
||||
if (keyCode === KeyCode.Unknown) {
|
||||
// maps to unknown keyCode
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (constantKeyCode === -1) {
|
||||
constantKeyCode = keyCode;
|
||||
} else if (constantKeyCode !== keyCode) {
|
||||
|
||||
@@ -179,10 +179,12 @@ export class WindowsKeyboardMapper implements IKeyboardMapper {
|
||||
private readonly _codeInfo: IHardwareCodeMapping[];
|
||||
private readonly _hwToKb: KeyCode[];
|
||||
private readonly _kbToLabel: string[] = [];
|
||||
private readonly _kbExists: boolean[];
|
||||
|
||||
constructor(rawMappings: IKeyboardMapping) {
|
||||
this._hwToKb = [];
|
||||
this._kbToLabel = [];
|
||||
this._kbExists = [];
|
||||
this._kbToLabel[KeyCode.Unknown] = KeyCodeUtils.toString(KeyCode.Unknown);
|
||||
|
||||
for (let code = KeyboardEventCode.None; code < KeyboardEventCode.MAX_VALUE; code++) {
|
||||
@@ -190,6 +192,7 @@ export class WindowsKeyboardMapper implements IKeyboardMapper {
|
||||
if (immutableKeyCode !== -1) {
|
||||
this._hwToKb[code] = immutableKeyCode;
|
||||
this._kbToLabel[immutableKeyCode] = KeyCodeUtils.toString(immutableKeyCode);
|
||||
this._kbExists[immutableKeyCode] = true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -223,6 +226,7 @@ export class WindowsKeyboardMapper implements IKeyboardMapper {
|
||||
this._codeInfo[code] = mapping;
|
||||
|
||||
if (keyCode !== KeyCode.Unknown) {
|
||||
this._kbExists[keyCode] = true;
|
||||
if (value >= CharCode.a && value <= CharCode.z) {
|
||||
this._kbToLabel[keyCode] = String.fromCharCode(CharCode.A + (value - CharCode.a));
|
||||
} else if (value) {
|
||||
@@ -328,8 +332,17 @@ export class WindowsKeyboardMapper implements IKeyboardMapper {
|
||||
|
||||
public resolveKeybinding(keybinding: Keybinding): WindowsNativeResolvedKeybinding[] {
|
||||
if (keybinding.type === KeybindingType.Chord) {
|
||||
let firstPartKeyCode = keybinding.firstPart.keyCode;
|
||||
let chordPartKeyCode = keybinding.chordPart.keyCode;
|
||||
if (!this._kbExists[firstPartKeyCode] || !this._kbExists[chordPartKeyCode]) {
|
||||
return [];
|
||||
}
|
||||
return [new WindowsNativeResolvedKeybinding(this, keybinding.firstPart, keybinding.chordPart)];
|
||||
} else {
|
||||
let keyCode = keybinding.keyCode;
|
||||
if (!this._kbExists[keyCode]) {
|
||||
return [];
|
||||
}
|
||||
return [new WindowsNativeResolvedKeybinding(this, keybinding, null)];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
'use strict';
|
||||
|
||||
import * as assert from 'assert';
|
||||
import { KeyMod, KeyCode, createKeybinding, SimpleKeybinding, Keybinding } from 'vs/base/common/keyCodes';
|
||||
import { KeyMod, KeyCode, createKeybinding, SimpleKeybinding, KeyChord } from 'vs/base/common/keyCodes';
|
||||
import { MacLinuxKeyboardMapper, IKeyboardMapping } from 'vs/workbench/services/keybinding/common/macLinuxKeyboardMapper';
|
||||
import { OperatingSystem } from 'vs/base/common/platform';
|
||||
import { UserSettingsLabelProvider } from 'vs/platform/keybinding/common/keybindingLabels';
|
||||
@@ -14,7 +14,7 @@ import { USLayoutResolvedKeybinding } from 'vs/platform/keybinding/common/usLayo
|
||||
import { KeyboardEventCodeUtils } from 'vs/workbench/services/keybinding/common/keyboardEventCode';
|
||||
import { IHTMLContentElement } from 'vs/base/common/htmlContent';
|
||||
import { TPromise } from 'vs/base/common/winjs.base';
|
||||
import { readRawMapping, assertMapping, IResolvedKeybinding, assertResolveKeybinding, simpleHTMLLabel } from 'vs/workbench/services/keybinding/test/keyboardMapperTestUtils';
|
||||
import { readRawMapping, assertMapping, IResolvedKeybinding, assertResolveKeybinding, simpleHTMLLabel, chordHTMLLabel } from 'vs/workbench/services/keybinding/test/keyboardMapperTestUtils';
|
||||
|
||||
function createKeyboardMapper(file: string, OS: OperatingSystem): TPromise<MacLinuxKeyboardMapper> {
|
||||
return readRawMapping<IKeyboardMapping>(file).then((rawMappings) => {
|
||||
@@ -49,9 +49,9 @@ suite('keyboardMapper - MAC de_ch', () => {
|
||||
return simpleHTMLLabel(pieces, OperatingSystem.Macintosh);
|
||||
}
|
||||
|
||||
// function _chordHTMLLabel(firstPart: string[], chordPart: string[]): IHTMLContentElement {
|
||||
// return chordHTMLLabel(firstPart, chordPart, OperatingSystem.Macintosh);
|
||||
// }
|
||||
function _chordHTMLLabel(firstPart: string[], chordPart: string[]): IHTMLContentElement {
|
||||
return chordHTMLLabel(firstPart, chordPart, OperatingSystem.Macintosh);
|
||||
}
|
||||
|
||||
test('kb => hw', () => {
|
||||
// unchanged
|
||||
@@ -68,42 +68,6 @@ suite('keyboardMapper - MAC de_ch', () => {
|
||||
assertKeybindingTranslation(KeyMod.CtrlCmd | KeyCode.US_SLASH, 'shift+cmd+Digit7');
|
||||
});
|
||||
|
||||
test('resolveKeybinding', () => {
|
||||
function _assertAllLabels(keybinding: Keybinding, labels: string[], ariaLabels: string[], htmlLabel: IHTMLContentElement[][]): void {
|
||||
const kb = mapper.resolveKeybinding(keybinding);
|
||||
|
||||
let actualLabels = kb.map(k => k.getLabel());
|
||||
assert.deepEqual(actualLabels, labels);
|
||||
|
||||
let actualAriaLabels = kb.map(k => k.getAriaLabel());
|
||||
assert.deepEqual(actualAriaLabels, ariaLabels);
|
||||
|
||||
let actualHTMLLabels = kb.map(k => k.getHTMLLabel());
|
||||
assert.deepEqual(actualHTMLLabels, htmlLabel);
|
||||
}
|
||||
|
||||
function assertAllLabels(keybinding: Keybinding, label: string | string[], ariaLabel: string | string[], htmlLabel: IHTMLContentElement[][]): void {
|
||||
let _labels = (typeof label === 'string' ? [label] : label);
|
||||
let _ariaLabels = (typeof ariaLabel === 'string' ? [ariaLabel] : ariaLabel);
|
||||
_assertAllLabels(keybinding, _labels, _ariaLabels, htmlLabel);
|
||||
}
|
||||
|
||||
// TODO: ElectronAccelerator, UserSettings
|
||||
assertAllLabels(
|
||||
createKeybinding(KeyMod.CtrlCmd | KeyCode.KEY_Z, OperatingSystem.Macintosh),
|
||||
'⌘Z',
|
||||
'Command+Z',
|
||||
[[{
|
||||
tagName: 'span',
|
||||
className: 'monaco-kb',
|
||||
children: [
|
||||
{ tagName: 'span', className: 'monaco-kbkey', text: '⌘' },
|
||||
{ tagName: 'span', className: 'monaco-kbkey', text: 'Z' },
|
||||
]
|
||||
}]]
|
||||
);
|
||||
});
|
||||
|
||||
// TODO: missing
|
||||
test('resolveKeybinding Cmd+A', () => {
|
||||
_assertResolveKeybinding(
|
||||
@@ -131,6 +95,176 @@ suite('keyboardMapper - MAC de_ch', () => {
|
||||
);
|
||||
});
|
||||
|
||||
test('resolveKeybinding Cmd+Z', () => {
|
||||
_assertResolveKeybinding(
|
||||
KeyMod.CtrlCmd | KeyCode.KEY_Z,
|
||||
[{
|
||||
label: '⌘Z',
|
||||
ariaLabel: 'Command+Z',
|
||||
HTMLLabel: [_simpleHTMLLabel(['⌘', 'Z'])],
|
||||
electronAccelerator: 'Cmd+Z',
|
||||
userSettingsLabel: 'cmd+z',
|
||||
isChord: false,
|
||||
hasCtrlModifier: false,
|
||||
hasShiftModifier: false,
|
||||
hasAltModifier: false,
|
||||
hasMetaModifier: true,
|
||||
dispatchParts: ['meta+[KeyY]', null],
|
||||
}]
|
||||
);
|
||||
});
|
||||
|
||||
test('resolveKeybinding Cmd+]', () => {
|
||||
_assertResolveKeybinding(
|
||||
KeyMod.CtrlCmd | KeyCode.US_CLOSE_SQUARE_BRACKET,
|
||||
[{
|
||||
label: '⌃⌥⌘6',
|
||||
ariaLabel: 'Control+Alt+Command+6',
|
||||
HTMLLabel: [_simpleHTMLLabel(['⌃', '⌥', '⌘', '6'])],
|
||||
electronAccelerator: 'Ctrl+Alt+Cmd+6',
|
||||
userSettingsLabel: 'ctrl+alt+cmd+6',
|
||||
isChord: false,
|
||||
hasCtrlModifier: true,
|
||||
hasShiftModifier: false,
|
||||
hasAltModifier: true,
|
||||
hasMetaModifier: true,
|
||||
dispatchParts: ['ctrl+alt+meta+[Digit6]', null],
|
||||
}]
|
||||
);
|
||||
});
|
||||
|
||||
test('resolveKeybinding Shift+]', () => {
|
||||
_assertResolveKeybinding(
|
||||
KeyMod.Shift | KeyCode.US_CLOSE_SQUARE_BRACKET,
|
||||
[{
|
||||
label: '⌃⌥9',
|
||||
ariaLabel: 'Control+Alt+9',
|
||||
HTMLLabel: [_simpleHTMLLabel(['⌃', '⌥', '9'])],
|
||||
electronAccelerator: 'Ctrl+Alt+9',
|
||||
userSettingsLabel: 'ctrl+alt+9',
|
||||
isChord: false,
|
||||
hasCtrlModifier: true,
|
||||
hasShiftModifier: false,
|
||||
hasAltModifier: true,
|
||||
hasMetaModifier: false,
|
||||
dispatchParts: ['ctrl+alt+[Digit9]', null],
|
||||
}]
|
||||
);
|
||||
});
|
||||
|
||||
test('resolveKeybinding Cmd+/', () => {
|
||||
_assertResolveKeybinding(
|
||||
KeyMod.CtrlCmd | KeyCode.US_SLASH,
|
||||
[{
|
||||
label: '⇧⌘7',
|
||||
ariaLabel: 'Shift+Command+7',
|
||||
HTMLLabel: [_simpleHTMLLabel(['⇧', '⌘', '7'])],
|
||||
electronAccelerator: 'Shift+Cmd+7',
|
||||
userSettingsLabel: 'shift+cmd+7',
|
||||
isChord: false,
|
||||
hasCtrlModifier: false,
|
||||
hasShiftModifier: true,
|
||||
hasAltModifier: false,
|
||||
hasMetaModifier: true,
|
||||
dispatchParts: ['shift+meta+[Digit7]', null],
|
||||
}]
|
||||
);
|
||||
});
|
||||
|
||||
test('resolveKeybinding Cmd+Shift+/', () => {
|
||||
_assertResolveKeybinding(
|
||||
KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.US_SLASH,
|
||||
[{
|
||||
label: '⇧⌘\'',
|
||||
ariaLabel: 'Shift+Command+\'',
|
||||
HTMLLabel: [_simpleHTMLLabel(['⇧', '⌘', '\''])],
|
||||
electronAccelerator: null,
|
||||
userSettingsLabel: 'shift+cmd+[Minus]',
|
||||
isChord: false,
|
||||
hasCtrlModifier: false,
|
||||
hasShiftModifier: true,
|
||||
hasAltModifier: false,
|
||||
hasMetaModifier: true,
|
||||
dispatchParts: ['shift+meta+[Minus]', null],
|
||||
}]
|
||||
);
|
||||
});
|
||||
|
||||
test('resolveKeybinding Cmd+K Cmd+\\', () => {
|
||||
_assertResolveKeybinding(
|
||||
KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyMod.CtrlCmd | KeyCode.US_BACKSLASH),
|
||||
[{
|
||||
label: '⌘K ⌃⇧⌥⌘7',
|
||||
ariaLabel: 'Command+K Control+Shift+Alt+Command+7',
|
||||
HTMLLabel: [_chordHTMLLabel(['⌘', 'K'], ['⌃', '⇧', '⌥', '⌘', '7'])],
|
||||
electronAccelerator: null,
|
||||
userSettingsLabel: 'cmd+k ctrl+shift+alt+cmd+7',
|
||||
isChord: true,
|
||||
hasCtrlModifier: false,
|
||||
hasShiftModifier: false,
|
||||
hasAltModifier: false,
|
||||
hasMetaModifier: false,
|
||||
dispatchParts: ['meta+[KeyK]', 'ctrl+shift+alt+meta+[Digit7]'],
|
||||
}]
|
||||
);
|
||||
});
|
||||
|
||||
test('resolveKeybinding Cmd+K Cmd+=', () => {
|
||||
_assertResolveKeybinding(
|
||||
KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyMod.CtrlCmd | KeyCode.US_EQUAL),
|
||||
[{
|
||||
label: '⌘K ⇧⌘0',
|
||||
ariaLabel: 'Command+K Shift+Command+0',
|
||||
HTMLLabel: [_chordHTMLLabel(['⌘', 'K'], ['⇧', '⌘', '0'])],
|
||||
electronAccelerator: null,
|
||||
userSettingsLabel: 'cmd+k shift+cmd+0',
|
||||
isChord: true,
|
||||
hasCtrlModifier: false,
|
||||
hasShiftModifier: false,
|
||||
hasAltModifier: false,
|
||||
hasMetaModifier: false,
|
||||
dispatchParts: ['meta+[KeyK]', 'shift+meta+[Digit0]'],
|
||||
}]
|
||||
);
|
||||
});
|
||||
|
||||
test('resolveKeybinding Cmd+DownArrow', () => {
|
||||
_assertResolveKeybinding(
|
||||
KeyMod.CtrlCmd | KeyCode.DownArrow,
|
||||
[{
|
||||
label: '⌘↓',
|
||||
ariaLabel: 'Command+DownArrow',
|
||||
HTMLLabel: [_simpleHTMLLabel(['⌘', '↓'])],
|
||||
electronAccelerator: 'Cmd+Down',
|
||||
userSettingsLabel: 'cmd+down',
|
||||
isChord: false,
|
||||
hasCtrlModifier: false,
|
||||
hasShiftModifier: false,
|
||||
hasAltModifier: false,
|
||||
hasMetaModifier: true,
|
||||
dispatchParts: ['meta+[ArrowDown]', null],
|
||||
}]
|
||||
);
|
||||
});
|
||||
|
||||
test('resolveKeybinding Cmd+NUMPAD_0', () => {
|
||||
_assertResolveKeybinding(
|
||||
KeyMod.CtrlCmd | KeyCode.NUMPAD_0,
|
||||
[{
|
||||
label: '⌘NumPad0',
|
||||
ariaLabel: 'Command+NumPad0',
|
||||
HTMLLabel: [_simpleHTMLLabel(['⌘', 'NumPad0'])],
|
||||
electronAccelerator: null,
|
||||
userSettingsLabel: 'cmd+numpad0',
|
||||
isChord: false,
|
||||
hasCtrlModifier: false,
|
||||
hasShiftModifier: false,
|
||||
hasAltModifier: false,
|
||||
hasMetaModifier: true,
|
||||
dispatchParts: ['meta+[Numpad0]', null],
|
||||
}]
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
suite('keyboardMapper - LINUX de_ch', () => {
|
||||
@@ -152,6 +286,18 @@ suite('keyboardMapper - LINUX de_ch', () => {
|
||||
_assertKeybindingTranslation(mapper, OperatingSystem.Linux, kb, expected);
|
||||
}
|
||||
|
||||
function _assertResolveKeybinding(k: number, expected: IResolvedKeybinding[]): void {
|
||||
assertResolveKeybinding(mapper, createKeybinding(k, OperatingSystem.Linux), expected);
|
||||
}
|
||||
|
||||
function _simpleHTMLLabel(pieces: string[]): IHTMLContentElement {
|
||||
return simpleHTMLLabel(pieces, OperatingSystem.Linux);
|
||||
}
|
||||
|
||||
function _chordHTMLLabel(firstPart: string[], chordPart: string[]): IHTMLContentElement {
|
||||
return chordHTMLLabel(firstPart, chordPart, OperatingSystem.Linux);
|
||||
}
|
||||
|
||||
test('kb => hw', () => {
|
||||
// unchanged
|
||||
assertKeybindingTranslation(KeyMod.CtrlCmd | KeyCode.KEY_1, 'ctrl+Digit1');
|
||||
@@ -166,6 +312,184 @@ suite('keyboardMapper - LINUX de_ch', () => {
|
||||
// Ctrl+/
|
||||
assertKeybindingTranslation(KeyMod.CtrlCmd | KeyCode.US_SLASH, 'ctrl+shift+Digit7');
|
||||
});
|
||||
|
||||
test('resolveKeybinding Ctrl+A', () => {
|
||||
_assertResolveKeybinding(
|
||||
KeyMod.CtrlCmd | KeyCode.KEY_A,
|
||||
[{
|
||||
label: 'Ctrl+A',
|
||||
ariaLabel: 'Control+A',
|
||||
HTMLLabel: [_simpleHTMLLabel(['Ctrl', 'A'])],
|
||||
electronAccelerator: 'Ctrl+A',
|
||||
userSettingsLabel: 'ctrl+a',
|
||||
isChord: false,
|
||||
hasCtrlModifier: true,
|
||||
hasShiftModifier: false,
|
||||
hasAltModifier: false,
|
||||
hasMetaModifier: false,
|
||||
dispatchParts: ['ctrl+[KeyA]', null],
|
||||
}]
|
||||
);
|
||||
});
|
||||
|
||||
test('resolveKeybinding Ctrl+Z', () => {
|
||||
_assertResolveKeybinding(
|
||||
KeyMod.CtrlCmd | KeyCode.KEY_Z,
|
||||
[{
|
||||
label: 'Ctrl+Z',
|
||||
ariaLabel: 'Control+Z',
|
||||
HTMLLabel: [_simpleHTMLLabel(['Ctrl', 'Z'])],
|
||||
electronAccelerator: 'Ctrl+Z',
|
||||
userSettingsLabel: 'ctrl+z',
|
||||
isChord: false,
|
||||
hasCtrlModifier: true,
|
||||
hasShiftModifier: false,
|
||||
hasAltModifier: false,
|
||||
hasMetaModifier: false,
|
||||
dispatchParts: ['ctrl+[KeyY]', null],
|
||||
}]
|
||||
);
|
||||
});
|
||||
|
||||
test('resolveKeybinding Ctrl+]', () => {
|
||||
_assertResolveKeybinding(
|
||||
KeyMod.CtrlCmd | KeyCode.US_CLOSE_SQUARE_BRACKET,
|
||||
[]
|
||||
);
|
||||
});
|
||||
|
||||
test('resolveKeybinding Shift+]', () => {
|
||||
_assertResolveKeybinding(
|
||||
KeyMod.Shift | KeyCode.US_CLOSE_SQUARE_BRACKET,
|
||||
[{
|
||||
label: 'Ctrl+Alt+0',
|
||||
ariaLabel: 'Control+Alt+0',
|
||||
HTMLLabel: [_simpleHTMLLabel(['Ctrl', 'Alt', '0'])],
|
||||
electronAccelerator: 'Ctrl+Alt+0',
|
||||
userSettingsLabel: 'ctrl+alt+0',
|
||||
isChord: false,
|
||||
hasCtrlModifier: true,
|
||||
hasShiftModifier: false,
|
||||
hasAltModifier: true,
|
||||
hasMetaModifier: false,
|
||||
dispatchParts: ['ctrl+alt+[Digit0]', null],
|
||||
}, {
|
||||
label: 'Ctrl+Alt+$',
|
||||
ariaLabel: 'Control+Alt+$',
|
||||
HTMLLabel: [_simpleHTMLLabel(['Ctrl', 'Alt', '$'])],
|
||||
electronAccelerator: null,
|
||||
userSettingsLabel: 'ctrl+alt+[Backslash]',
|
||||
isChord: false,
|
||||
hasCtrlModifier: true,
|
||||
hasShiftModifier: false,
|
||||
hasAltModifier: true,
|
||||
hasMetaModifier: false,
|
||||
dispatchParts: ['ctrl+alt+[Backslash]', null],
|
||||
}]
|
||||
);
|
||||
});
|
||||
|
||||
test('resolveKeybinding Ctrl+/', () => {
|
||||
_assertResolveKeybinding(
|
||||
KeyMod.CtrlCmd | KeyCode.US_SLASH,
|
||||
[{
|
||||
label: 'Ctrl+Shift+7',
|
||||
ariaLabel: 'Control+Shift+7',
|
||||
HTMLLabel: [_simpleHTMLLabel(['Ctrl', 'Shift', '7'])],
|
||||
electronAccelerator: 'Ctrl+Shift+7',
|
||||
userSettingsLabel: 'ctrl+shift+7',
|
||||
isChord: false,
|
||||
hasCtrlModifier: true,
|
||||
hasShiftModifier: true,
|
||||
hasAltModifier: false,
|
||||
hasMetaModifier: false,
|
||||
dispatchParts: ['ctrl+shift+[Digit7]', null],
|
||||
}]
|
||||
);
|
||||
});
|
||||
|
||||
test('resolveKeybinding Ctrl+Shift+/', () => {
|
||||
_assertResolveKeybinding(
|
||||
KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.US_SLASH,
|
||||
[{
|
||||
label: 'Ctrl+Shift+\'',
|
||||
ariaLabel: 'Control+Shift+\'',
|
||||
HTMLLabel: [_simpleHTMLLabel(['Ctrl', 'Shift', '\''])],
|
||||
electronAccelerator: null,
|
||||
userSettingsLabel: 'ctrl+shift+[Minus]',
|
||||
isChord: false,
|
||||
hasCtrlModifier: true,
|
||||
hasShiftModifier: true,
|
||||
hasAltModifier: false,
|
||||
hasMetaModifier: false,
|
||||
dispatchParts: ['ctrl+shift+[Minus]', null],
|
||||
}]
|
||||
);
|
||||
});
|
||||
|
||||
test('resolveKeybinding Ctrl+K Ctrl+\\', () => {
|
||||
_assertResolveKeybinding(
|
||||
KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyMod.CtrlCmd | KeyCode.US_BACKSLASH),
|
||||
[]
|
||||
);
|
||||
});
|
||||
|
||||
test('resolveKeybinding Ctrl+K Ctrl+=', () => {
|
||||
_assertResolveKeybinding(
|
||||
KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyMod.CtrlCmd | KeyCode.US_EQUAL),
|
||||
[{
|
||||
label: 'Ctrl+K Ctrl+Shift+0',
|
||||
ariaLabel: 'Control+K Control+Shift+0',
|
||||
HTMLLabel: [_chordHTMLLabel(['Ctrl', 'K'], ['Ctrl', 'Shift', '0'])],
|
||||
electronAccelerator: null,
|
||||
userSettingsLabel: 'ctrl+k ctrl+shift+0',
|
||||
isChord: true,
|
||||
hasCtrlModifier: false,
|
||||
hasShiftModifier: false,
|
||||
hasAltModifier: false,
|
||||
hasMetaModifier: false,
|
||||
dispatchParts: ['ctrl+[KeyK]', 'ctrl+shift+[Digit0]'],
|
||||
}]
|
||||
);
|
||||
});
|
||||
|
||||
test('resolveKeybinding Ctrl+DownArrow', () => {
|
||||
_assertResolveKeybinding(
|
||||
KeyMod.CtrlCmd | KeyCode.DownArrow,
|
||||
[{
|
||||
label: 'Ctrl+DownArrow',
|
||||
ariaLabel: 'Control+DownArrow',
|
||||
HTMLLabel: [_simpleHTMLLabel(['Ctrl', 'DownArrow'])],
|
||||
electronAccelerator: 'Ctrl+Down',
|
||||
userSettingsLabel: 'ctrl+down',
|
||||
isChord: false,
|
||||
hasCtrlModifier: true,
|
||||
hasShiftModifier: false,
|
||||
hasAltModifier: false,
|
||||
hasMetaModifier: false,
|
||||
dispatchParts: ['ctrl+[ArrowDown]', null],
|
||||
}]
|
||||
);
|
||||
});
|
||||
|
||||
test('resolveKeybinding Ctrl+NUMPAD_0', () => {
|
||||
_assertResolveKeybinding(
|
||||
KeyMod.CtrlCmd | KeyCode.NUMPAD_0,
|
||||
[{
|
||||
label: 'Ctrl+NumPad0',
|
||||
ariaLabel: 'Control+NumPad0',
|
||||
HTMLLabel: [_simpleHTMLLabel(['Ctrl', 'NumPad0'])],
|
||||
electronAccelerator: null,
|
||||
userSettingsLabel: 'ctrl+numpad0',
|
||||
isChord: false,
|
||||
hasCtrlModifier: true,
|
||||
hasShiftModifier: false,
|
||||
hasAltModifier: false,
|
||||
hasMetaModifier: false,
|
||||
dispatchParts: ['ctrl+[Numpad0]', null],
|
||||
}]
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
suite('keyboardMapper - LINUX de_ch', () => {
|
||||
|
||||
@@ -18,8 +18,8 @@ function createKeyboardMapper(file: string): TPromise<WindowsKeyboardMapper> {
|
||||
});
|
||||
}
|
||||
|
||||
function _assertResolveKeybinding(mapper: WindowsKeyboardMapper, k: number, expected: IResolvedKeybinding): void {
|
||||
assertResolveKeybinding(mapper, createKeybinding(k, OperatingSystem.Windows), [expected]);
|
||||
function _assertResolveKeybinding(mapper: WindowsKeyboardMapper, k: number, expected: IResolvedKeybinding[]): void {
|
||||
assertResolveKeybinding(mapper, createKeybinding(k, OperatingSystem.Windows), expected);
|
||||
}
|
||||
|
||||
function _simpleHTMLLabel(pieces: string[]): IHTMLContentElement {
|
||||
@@ -49,7 +49,7 @@ suite('keyboardMapper - WINDOWS de_ch', () => {
|
||||
_assertResolveKeybinding(
|
||||
mapper,
|
||||
KeyMod.CtrlCmd | KeyCode.KEY_A,
|
||||
{
|
||||
[{
|
||||
label: 'Ctrl+A',
|
||||
ariaLabel: 'Control+A',
|
||||
HTMLLabel: [_simpleHTMLLabel(['Ctrl', 'A'])],
|
||||
@@ -61,7 +61,7 @@ suite('keyboardMapper - WINDOWS de_ch', () => {
|
||||
hasAltModifier: false,
|
||||
hasMetaModifier: false,
|
||||
dispatchParts: ['ctrl+A', null],
|
||||
}
|
||||
}]
|
||||
);
|
||||
});
|
||||
|
||||
@@ -69,7 +69,7 @@ suite('keyboardMapper - WINDOWS de_ch', () => {
|
||||
_assertResolveKeybinding(
|
||||
mapper,
|
||||
KeyMod.CtrlCmd | KeyCode.KEY_Z,
|
||||
{
|
||||
[{
|
||||
label: 'Ctrl+Z',
|
||||
ariaLabel: 'Control+Z',
|
||||
HTMLLabel: [_simpleHTMLLabel(['Ctrl', 'Z'])],
|
||||
@@ -81,7 +81,7 @@ suite('keyboardMapper - WINDOWS de_ch', () => {
|
||||
hasAltModifier: false,
|
||||
hasMetaModifier: false,
|
||||
dispatchParts: ['ctrl+Z', null],
|
||||
}
|
||||
}]
|
||||
);
|
||||
});
|
||||
|
||||
@@ -89,7 +89,7 @@ suite('keyboardMapper - WINDOWS de_ch', () => {
|
||||
_assertResolveKeybinding(
|
||||
mapper,
|
||||
KeyMod.CtrlCmd | KeyCode.US_CLOSE_SQUARE_BRACKET,
|
||||
{
|
||||
[{
|
||||
label: 'Ctrl+^',
|
||||
ariaLabel: 'Control+^',
|
||||
HTMLLabel: [_simpleHTMLLabel(['Ctrl', '^'])],
|
||||
@@ -101,7 +101,28 @@ suite('keyboardMapper - WINDOWS de_ch', () => {
|
||||
hasAltModifier: false,
|
||||
hasMetaModifier: false,
|
||||
dispatchParts: ['ctrl+]', null],
|
||||
}
|
||||
}]
|
||||
);
|
||||
});
|
||||
|
||||
|
||||
test('resolveKeybinding Shift+]', () => {
|
||||
_assertResolveKeybinding(
|
||||
mapper,
|
||||
KeyMod.Shift | KeyCode.US_CLOSE_SQUARE_BRACKET,
|
||||
[{
|
||||
label: 'Shift+^',
|
||||
ariaLabel: 'Shift+^',
|
||||
HTMLLabel: [_simpleHTMLLabel(['Shift', '^'])],
|
||||
electronAccelerator: 'Shift+]',
|
||||
userSettingsLabel: 'shift+]',
|
||||
isChord: false,
|
||||
hasCtrlModifier: false,
|
||||
hasShiftModifier: true,
|
||||
hasAltModifier: false,
|
||||
hasMetaModifier: false,
|
||||
dispatchParts: ['shift+]', null],
|
||||
}]
|
||||
);
|
||||
});
|
||||
|
||||
@@ -109,7 +130,7 @@ suite('keyboardMapper - WINDOWS de_ch', () => {
|
||||
_assertResolveKeybinding(
|
||||
mapper,
|
||||
KeyMod.CtrlCmd | KeyCode.US_SLASH,
|
||||
{
|
||||
[{
|
||||
label: 'Ctrl+§',
|
||||
ariaLabel: 'Control+§',
|
||||
HTMLLabel: [_simpleHTMLLabel(['Ctrl', '§'])],
|
||||
@@ -121,7 +142,27 @@ suite('keyboardMapper - WINDOWS de_ch', () => {
|
||||
hasAltModifier: false,
|
||||
hasMetaModifier: false,
|
||||
dispatchParts: ['ctrl+/', null],
|
||||
}
|
||||
}]
|
||||
);
|
||||
});
|
||||
|
||||
test('resolveKeybinding Ctrl+Shift+/', () => {
|
||||
_assertResolveKeybinding(
|
||||
mapper,
|
||||
KeyMod.CtrlCmd | KeyMod.Shift | KeyCode.US_SLASH,
|
||||
[{
|
||||
label: 'Ctrl+Shift+§',
|
||||
ariaLabel: 'Control+Shift+§',
|
||||
HTMLLabel: [_simpleHTMLLabel(['Ctrl', 'Shift', '§'])],
|
||||
electronAccelerator: 'Ctrl+Shift+/',
|
||||
userSettingsLabel: 'ctrl+shift+/',
|
||||
isChord: false,
|
||||
hasCtrlModifier: true,
|
||||
hasShiftModifier: true,
|
||||
hasAltModifier: false,
|
||||
hasMetaModifier: false,
|
||||
dispatchParts: ['ctrl+shift+/', null],
|
||||
}]
|
||||
);
|
||||
});
|
||||
|
||||
@@ -129,7 +170,7 @@ suite('keyboardMapper - WINDOWS de_ch', () => {
|
||||
_assertResolveKeybinding(
|
||||
mapper,
|
||||
KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyMod.CtrlCmd | KeyCode.US_BACKSLASH),
|
||||
{
|
||||
[{
|
||||
label: 'Ctrl+K Ctrl+ä',
|
||||
ariaLabel: 'Control+K Control+ä',
|
||||
HTMLLabel: [_chordHTMLLabel(['Ctrl', 'K'], ['Ctrl', 'ä'])],
|
||||
@@ -141,7 +182,55 @@ suite('keyboardMapper - WINDOWS de_ch', () => {
|
||||
hasAltModifier: false,
|
||||
hasMetaModifier: false,
|
||||
dispatchParts: ['ctrl+K', 'ctrl+\\'],
|
||||
}
|
||||
}]
|
||||
);
|
||||
});
|
||||
|
||||
test('resolveKeybinding Ctrl+K Ctrl+=', () => {
|
||||
_assertResolveKeybinding(
|
||||
mapper,
|
||||
KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyMod.CtrlCmd | KeyCode.US_EQUAL),
|
||||
[]
|
||||
);
|
||||
});
|
||||
|
||||
test('resolveKeybinding Ctrl+DownArrow', () => {
|
||||
_assertResolveKeybinding(
|
||||
mapper,
|
||||
KeyMod.CtrlCmd | KeyCode.DownArrow,
|
||||
[{
|
||||
label: 'Ctrl+DownArrow',
|
||||
ariaLabel: 'Control+DownArrow',
|
||||
HTMLLabel: [_simpleHTMLLabel(['Ctrl', 'DownArrow'])],
|
||||
electronAccelerator: 'Ctrl+Down',
|
||||
userSettingsLabel: 'ctrl+down',
|
||||
isChord: false,
|
||||
hasCtrlModifier: true,
|
||||
hasShiftModifier: false,
|
||||
hasAltModifier: false,
|
||||
hasMetaModifier: false,
|
||||
dispatchParts: ['ctrl+DownArrow', null],
|
||||
}]
|
||||
);
|
||||
});
|
||||
|
||||
test('resolveKeybinding Ctrl+NUMPAD_0', () => {
|
||||
_assertResolveKeybinding(
|
||||
mapper,
|
||||
KeyMod.CtrlCmd | KeyCode.NUMPAD_0,
|
||||
[{
|
||||
label: 'Ctrl+NumPad0',
|
||||
ariaLabel: 'Control+NumPad0',
|
||||
HTMLLabel: [_simpleHTMLLabel(['Ctrl', 'NumPad0'])],
|
||||
electronAccelerator: null,
|
||||
userSettingsLabel: 'ctrl+numpad0',
|
||||
isChord: false,
|
||||
hasCtrlModifier: true,
|
||||
hasShiftModifier: false,
|
||||
hasAltModifier: false,
|
||||
hasMetaModifier: false,
|
||||
dispatchParts: ['ctrl+NumPad0', null],
|
||||
}]
|
||||
);
|
||||
});
|
||||
});
|
||||
@@ -165,7 +254,7 @@ suite('keyboardMapper - WINDOWS en_us', () => {
|
||||
_assertResolveKeybinding(
|
||||
mapper,
|
||||
KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyMod.CtrlCmd | KeyCode.US_BACKSLASH),
|
||||
{
|
||||
[{
|
||||
label: 'Ctrl+K Ctrl+\\',
|
||||
ariaLabel: 'Control+K Control+\\',
|
||||
HTMLLabel: [_chordHTMLLabel(['Ctrl', 'K'], ['Ctrl', '\\'])],
|
||||
@@ -177,7 +266,7 @@ suite('keyboardMapper - WINDOWS en_us', () => {
|
||||
hasAltModifier: false,
|
||||
hasMetaModifier: false,
|
||||
dispatchParts: ['ctrl+K', 'ctrl+\\'],
|
||||
}
|
||||
}]
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user