aboutsummaryrefslogtreecommitdiffstats
path: root/vimiumFrontend.js
diff options
context:
space:
mode:
authorilya2010-03-07 14:43:59 -0800
committerilya2010-03-07 14:43:59 -0800
commit96ae6f843b3d2f03122290fb26c2a9a4db1955cd (patch)
treec7cebbade5d9804bd4b00ff4c5f875f904249dbb /vimiumFrontend.js
parent4c32225f98cb6bf56f87834bef92f5c64476a90a (diff)
downloadvimium-96ae6f843b3d2f03122290fb26c2a9a4db1955cd.tar.bz2
Handle shift for non-letter keys that are affected by the WebKit bug under Windows/Linux. This closes issue #84.
Diffstat (limited to 'vimiumFrontend.js')
-rw-r--r--vimiumFrontend.js30
1 files changed, 15 insertions, 15 deletions
diff --git a/vimiumFrontend.js b/vimiumFrontend.js
index 9ad7c7e0..f3259f10 100644
--- a/vimiumFrontend.js
+++ b/vimiumFrontend.js
@@ -30,20 +30,18 @@ var currentZoomLevel = 100;
// This is a mapping of the incorrect keyIdentifiers generated by Webkit on Windows during keydown events to
// the correct identifiers, which are correctly generated on Mac. We require this mapping to properly handle
// these keys on Windows. See https://bugs.webkit.org/show_bug.cgi?id=19906 for more details.
-// TODO(philc): Currently we cannot distinguish between e.g. ",<"; we'll need to look at the keyboard event's
-// shift key to do so on Windows.
var keyIdentifierCorrectionMap = {
- "U+00C0": "U+0060", // `~
- "U+00BD": "U+002D", // -_
- "U+00BB": "U+003D", // =+
- "U+00DB": "U+005B", // [{
- "U+00DD": "U+005D", // ]}
- "U+00DC": "U+005C", // \|
- "U+00BA": "U+003B", // ;:
- "U+00DE": "U+0027", // '"
- "U+00BC": "U+002C", // ,<
- "U+00BE": "U+002E", // .>
- "U+00BF": "U+002F" // /?
+ "U+00C0": ["U+0060", "U+007E"], // `~
+ "U+00BD": ["U+002D", "U+005F"], // -_
+ "U+00BB": ["U+003D", "U+002B"], // =+
+ "U+00DB": ["U+005B", "U+007B"], // [{
+ "U+00DD": ["U+005D", "U+007D"], // ]}
+ "U+00DC": ["U+005C", "U+007C"], // \|
+ "U+00BA": ["U+003B", "U+003A"], // ;:
+ "U+00DE": ["U+0027", "U+0022"], // '"
+ "U+00BC": ["U+002C", "U+003C"], // ,<
+ "U+00BE": ["U+002E", "U+003E"], // .>
+ "U+00BF": ["U+002F", "U+003F"] // /?
};
function getSetting(key) {
@@ -246,8 +244,10 @@ function getKeyChar(event) {
var keyIdentifier = event.keyIdentifier;
// On Windows, the keyIdentifiers for non-letter keys are incorrect. See
// https://bugs.webkit.org/show_bug.cgi?id=19906 for more details.
- if (platform == "Windows" || platform == "Linux")
- keyIdentifier = keyIdentifierCorrectionMap[keyIdentifier] || keyIdentifier;
+ if ((platform == "Windows" || platform == "Linux") && keyIdentifierCorrectionMap[keyIdentifier]) {
+ correctedIdentifiers = keyIdentifierCorrectionMap[keyIdentifier];
+ keyIdentifier = event.shiftKey ? correctedIdentifiers[1] : correctedIdentifiers[0];
+ }
var unicodeKeyInHex = "0x" + keyIdentifier.substring(2);
return String.fromCharCode(parseInt(unicodeKeyInHex)).toLowerCase();
}