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>");      }    }  | 
