aboutsummaryrefslogtreecommitdiffstats
path: root/vimiumFrontend.js
diff options
context:
space:
mode:
authorClemens Buchacher2010-01-17 17:26:19 +0800
committerIlya2010-01-18 06:16:45 +0800
commitcf1c061d78b5f5919d7f59955b878d778a878ef2 (patch)
tree13857ddf9d1c7d0cb9b45bcfc478de1b52093c90 /vimiumFrontend.js
parent442d82774560a00beef4647fe235c5b75b66b894 (diff)
downloadvimium-cf1c061d78b5f5919d7f59955b878d778a878ef2.tar.bz2
map <c-[> to Escape
Diffstat (limited to 'vimiumFrontend.js')
-rw-r--r--vimiumFrontend.js39
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>");
}
}