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

Remove Mac specific keybindings that don't work #15687

Closed
wants to merge 1 commit into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
120 changes: 0 additions & 120 deletions src/vs/workbench/services/keybinding/electron-browser/nativeKeymap.ts
Original file line number Diff line number Diff line change
Expand Up @@ -203,133 +203,13 @@ const NATIVE_KEY_CODE_TO_KEY_CODE: { [nativeKeyCode: string]: KeyCode; } = {
VKEY_ALTGR: KeyCode.Unknown, // MISSING
};

// See http://www.w3.org/TR/DOM-Level-3-Events/#h-optionally-fixed-virtual-key-codes
// See issue #1302: Chromium has implemented section B.2.4 of DOM Level 3 Events on mac
// This is bad news because we cannot trust the event's keyCode to be the actual pressed key.
// Here we try to find out the actual pressed key by "undoing" their massaging

// Key Character Virtual Key Code
// Semicolon ';' 186
// Colon ':' 186
// Equals sign '=' 187
// Plus '+' 187
// Comma ',' 188
// Less than sign '<' 188
// Minus '-' 189
// Underscore '_' 189
// Period '.' 190
// Greater than sign '>' 190
// Forward slash '/' 191
// Question mark '?' 191
// Backtick '`' 192
// Tilde '~' 192
// Opening square bracket '[' 219
// Opening curly brace '{' 219
// Backslash '\' 220
// Pipe '|' 220
// Closing square bracket ']' 221
// Closing curly brace '}' 221
// Single quote ''' 222
// Double quote '"' 222

interface IFixedVirtualKeyCodeElement {
char: string;
virtualKeyCode: number;
}

let _b24_fixedVirtualKeyCodes: IFixedVirtualKeyCodeElement[] = [
{ char: ';', virtualKeyCode: 186 },
{ char: ':', virtualKeyCode: 186 },
{ char: '=', virtualKeyCode: 187 },
{ char: '+', virtualKeyCode: 187 },
{ char: ',', virtualKeyCode: 188 },
{ char: '<', virtualKeyCode: 188 },
{ char: '-', virtualKeyCode: 189 },
{ char: '_', virtualKeyCode: 189 },
{ char: '.', virtualKeyCode: 190 },
{ char: '>', virtualKeyCode: 190 },
{ char: '/', virtualKeyCode: 191 },
{ char: '?', virtualKeyCode: 191 },
{ char: '`', virtualKeyCode: 192 },
{ char: '~', virtualKeyCode: 192 },
{ char: '[', virtualKeyCode: 219 },
{ char: '{', virtualKeyCode: 219 },
{ char: '\\', virtualKeyCode: 220 },
{ char: '|', virtualKeyCode: 220 },
{ char: ']', virtualKeyCode: 221 },
{ char: '}', virtualKeyCode: 221 },
{ char: '\'', virtualKeyCode: 222 },
{ char: '"', virtualKeyCode: 222 },
];
let _b24_interestingChars: { [char: string]: boolean; } = Object.create(null);
_b24_fixedVirtualKeyCodes.forEach(el => _b24_interestingChars[el.char] = true);

let _b24_interestingVirtualKeyCodes: { [virtualKeyCode: number]: boolean; } = Object.create(null);
_b24_fixedVirtualKeyCodes.forEach(el => _b24_interestingVirtualKeyCodes[el.virtualKeyCode] = true);

interface IUnfixedVirtualKeyCodeMap {
[char: string]: KeyCode;
}
let _b24_getActualKeyCodeMap = (function () {
let result: IUnfixedVirtualKeyCodeMap = null;
return function () {
if (!result) {
result = Object.create(null);

let nativeMappings = getNativeKeymap();

for (let i = 0, len = nativeMappings.length; i < len; i++) {
let nativeMapping = nativeMappings[i];

if (nativeMapping.value && _b24_interestingChars[nativeMapping.value]) {
// console.log(nativeMapping.value + " is made by " + nativeMapping.key_code);
let keyCode = NATIVE_KEY_CODE_TO_KEY_CODE[nativeMapping.key_code];
if (keyCode) {
if (!result[nativeMapping.value] || result[nativeMapping.value] > keyCode) {
result[nativeMapping.value] = keyCode;
}
}
}

if (nativeMapping.withShift && _b24_interestingChars[nativeMapping.withShift]) {
// console.log(nativeMapping.withShift + " is made by " + nativeMapping.key_code);
let keyCode = NATIVE_KEY_CODE_TO_KEY_CODE[nativeMapping.key_code];
if (keyCode) {
if (!result[nativeMapping.withShift] || result[nativeMapping.withShift] > keyCode) {
result[nativeMapping.withShift] = keyCode;
}
}
}
}
}
return result;
};
})();

setExtractKeyCode((e: KeyboardEvent) => {
if (e.charCode) {
// "keypress" events mostly
let char = String.fromCharCode(e.charCode).toUpperCase();
return KeyCodeUtils.fromString(char);
}

if (Platform.isMacintosh && _b24_interestingVirtualKeyCodes[e.keyCode] && typeof (<any>e).keyIdentifier === 'string') {
let keyIdentifier: string = (<any>e).keyIdentifier;
let strCharCode = keyIdentifier.substr(2);
try {
let charCode = parseInt(strCharCode, 16);
let char = String.fromCharCode(charCode);
let unfixMap = _b24_getActualKeyCodeMap();
if (unfixMap[char]) {
return unfixMap[char];
}
// console.log(keyIdentifier + ' => ' + char);
} catch (err) {
}
}
// _b24_getActualKeyCodeMap();
// console.log('injected!!!');

return lookupKeyCode(e);
});

Expand Down