diff options
| author | Clemens Buchacher | 2010-01-17 17:26:19 +0800 |
|---|---|---|
| committer | Ilya | 2010-01-18 06:16:45 +0800 |
| commit | cf1c061d78b5f5919d7f59955b878d778a878ef2 (patch) | |
| tree | 13857ddf9d1c7d0cb9b45bcfc478de1b52093c90 /vimiumFrontend.js | |
| parent | 442d82774560a00beef4647fe235c5b75b66b894 (diff) | |
| download | vimium-cf1c061d78b5f5919d7f59955b878d778a878ef2.tar.bz2 | |
map <c-[> to Escape
Diffstat (limited to 'vimiumFrontend.js')
| -rw-r--r-- | vimiumFrontend.js | 39 |
1 files changed, 27 insertions, 12 deletions
diff --git a/vimiumFrontend.js b/vimiumFrontend.js index 34499220..f1df7f4b 100644 --- a/vimiumFrontend.js +++ b/vimiumFrontend.js @@ -231,6 +231,28 @@ function toggleViewSourceCallback(url) { else { window.location.href = "view-source:" + url; } } +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; + unicodeKeyInHex = "0x" + keyIdentifier.substring(2); + return String.fromCharCode(parseInt(unicodeKeyInHex)).toLowerCase(); +} + +function isCtrl(event) { + if (platform == "Mac") + return event.metaKey; + else + return event.ctrlKey; +} + +function isEscape(event) { + return event.keyCode == keyCodes.ESC || + (isCtrl(event) && getKeyChar(event) == '['); +} + /** * Sends everything except i & ESC to the handler in background_page. i & ESC are special because they control * insert mode which is local state to the page. The key will be are either a single ascii letter or a @@ -246,17 +268,10 @@ function onKeydown(event) { // Ignore modifier keys by themselves. if (event.keyCode > 31) { - 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; - unicodeKeyInHex = "0x" + keyIdentifier.substring(2); - keyChar = String.fromCharCode(parseInt(unicodeKeyInHex)).toLowerCase(); + keyChar = getKeyChar(event); // Enter insert mode when the user enables the native find interface. - if (keyChar == "f" && !event.shiftKey && ((platform == "Mac" && event.metaKey) || - (platform != "Mac" && event.ctrlKey))) + if (keyChar == "f" && !event.shiftKey && isCtrl(event)) { enterInsertMode(); return; @@ -270,7 +285,7 @@ function onKeydown(event) { keyChar = null; } - if (insertMode && event.keyCode == keyCodes.ESC) + if (insertMode && isEscape(event)) { // Note that we can't programmatically blur out of Flash embeds from Javascript. if (event.srcElement.tagName != "EMBED") { @@ -281,7 +296,7 @@ function onKeydown(event) { } else if (findMode) { - if (event.keyCode == keyCodes.ESC) + if (isEscape(event)) exitFindMode(); else if (keyChar) { @@ -309,7 +324,7 @@ function onKeydown(event) { keyPort.postMessage(keyChar); } - else if (event.keyCode == keyCodes.ESC) { + else if (isEscape(event)) { keyPort.postMessage("<ESC>"); } } |
