Skip to content

Commit 8d46cab

Browse files
committed
Merge pull request #53 from atton-/fix_mac_ctrl_keys
Support <C-[>, <C-]>, <C-^>, <C-\\>, <C-_>, <C--> in Mac
2 parents f10adf2 + d9426b8 commit 8d46cab

File tree

1 file changed

+42
-26
lines changed

1 file changed

+42
-26
lines changed

common/content/events.js

+42-26
Original file line numberDiff line numberDiff line change
@@ -504,33 +504,49 @@ const Events = Module("events", {
504504

505505
if (event.keyCode in this._code_key)
506506
key = this._code_key[event.keyCode];
507-
}
508-
// [Ctrl-Bug] special handling of mysterious <C-[>, <C-\\>, <C-]>, <C-^>, <C-_> bugs (OS/X)
509-
// (i.e., cntrl codes 27--31)
510-
// ---
511-
// For more information, see:
512-
// [*] Vimp FAQ: http://vimperator.org/trac/wiki/Vimperator/FAQ#WhydoesntC-workforEscMacOSX
513-
// [*] Referenced mailing list msg: http://www.mozdev.org/pipermail/vimperator/2008-May/001548.html
514-
// [*] Mozilla bug 416227: event.charCode in keypress handler has unexpected values on Mac for Ctrl with chars in "[ ] _ \"
515-
// https://bugzilla.mozilla.org/show_bug.cgi?query_format=specific&order=relevance+desc&bug_status=__open__&id=416227
516-
// [*] Mozilla bug 432951: Ctrl+'foo' doesn't seem same charCode as Meta+'foo' on Cocoa
517-
// https://bugzilla.mozilla.org/show_bug.cgi?query_format=specific&order=relevance+desc&bug_status=__open__&id=432951
518-
// ---
519-
//
520-
// The following fixes are only activated if liberator.has("MacUnix").
521-
// Technically, they prevent mappings from <C-Esc> (and
522-
// <C-C-]> if your fancy keyboard permits such things<?>), but
523-
// these <C-control> mappings are probably pathological (<C-Esc>
524-
// certainly is on Windows), and so it is probably
525-
// harmless to remove the has("MacUnix") if desired.
526-
//
527-
else if (liberator.has("MacUnix") && event.ctrlKey && charCode >= 27 && charCode <= 31) {
528-
if (charCode == 27) { // [Ctrl-Bug 1/5] the <C-[> bug
529-
key = "Esc";
530-
modifier = modifier.replace("C-", "");
507+
508+
// [Ctrl-Bug] special handling of mysterious <C-[>, <C-\\>, <C-]>, <C-^>, <C-_> <C--> bugs (OS/X)
509+
// ---
510+
// For more information, see:
511+
// [*] Vimp FAQ: http://vimperator.org/trac/wiki/Vimperator/FAQ#WhydoesntC-workforEscMacOSX
512+
// [*] Referenced mailing list msg: http://www.mozdev.org/pipermail/vimperator/2008-May/001548.html
513+
// [*] Mozilla bug 416227: event.charCode in keypress handler has unexpected values on Mac for Ctrl with chars in "[ ] _ \"
514+
// https://bugzilla.mozilla.org/show_bug.cgi?query_format=specific&order=relevance+desc&bug_status=__open__&id=416227
515+
// [*] Mozilla bug 432951: Ctrl+'foo' doesn't seem same charCode as Meta+'foo' on Cocoa
516+
// https://bugzilla.mozilla.org/show_bug.cgi?query_format=specific&order=relevance+desc&bug_status=__open__&id=432951
517+
// ---
518+
//
519+
// The following fixes are only activated if liberator.has("MacUnix").
520+
// Technically, they prevent mappings from <C-Esc> (and
521+
// <C-C-]> if your fancy keyboard permits such things<?>), but
522+
// these <C-control> mappings are probably pathological (<C-Esc>
523+
// certainly is on Windows), and so it is probably
524+
// harmless to remove the has("MacUnix") if desired.
525+
526+
if (liberator.has("MacUnix") && event.ctrlKey) {
527+
switch (event.keyCode) {
528+
case 219: // <C-[>
529+
key = "Esc";
530+
modifier = modifier.replace("C-", "");
531+
break;
532+
case 220: // <C-\\>
533+
key = "\\";
534+
break;
535+
case 221: // <C-]>
536+
key = "]";
537+
break;
538+
case 173: // <C-_> and <C-->
539+
key = event.shiftKey ? "_" : "-";
540+
modifier = modifier.replace("S-", "");
541+
break;
542+
case 54: // <C-^>
543+
key = "^";
544+
modifier = modifier.replace("S-", "");
545+
break;
546+
default:
547+
break;
548+
}
531549
}
532-
else // [Ctrl-Bug 2,3,4,5/5] the <C-\\>, <C-]>, <C-^>, <C-_> bugs
533-
key = String.fromCharCode(charCode + 64);
534550
}
535551
// a normal key like a, b, c, 0, etc.
536552
else if (charCode > 0) {

0 commit comments

Comments
 (0)