From 1ad34dcea418bf062564d349207d3b6cbcb526a3 Mon Sep 17 00:00:00 2001 From: Ilya Sukhar Date: Tue, 5 Oct 2010 10:52:17 -0700 Subject: Fixed #221. Thanks hbt. --- linkHints.js | 1 + 1 file changed, 1 insertion(+) diff --git a/linkHints.js b/linkHints.js index 7593a630..16d6fcbf 100644 --- a/linkHints.js +++ b/linkHints.js @@ -208,6 +208,7 @@ function updateLinkHints() { matchedLink.focus(); // When focusing a textbox, put the selection caret at the end of the textbox's contents. matchedLink.setSelectionRange(matchedLink.value.length, matchedLink.value.length); + deactivateLinkHintsMode(); } else { // When we're opening the link in the current tab, don't navigate to the selected link immediately; // we want to give the user some feedback depicting which link they've selected by focusing it. -- cgit v1.2.3 From 828721c7913a2f334f6b6bac08de74c980c38ef5 Mon Sep 17 00:00:00 2001 From: Svein-Erik Larsen Date: Thu, 14 Oct 2010 22:50:27 +0200 Subject: Fixed problems with / being interpreted as ? This also fixed problems with Norwegian keyboards. Incidentally, this allows website hotkeys to override vimium's hotkeys. I don't know if this is a desired effect, but I kind of like it :) I have _only_ tested the code on Linux. --- CREDITS | 1 + vimiumFrontend.js | 98 ++++++++++++++++++++++++++++++++++++------------------- 2 files changed, 66 insertions(+), 33 deletions(-) diff --git a/CREDITS b/CREDITS index 9f814f7a..c1ccd981 100644 --- a/CREDITS +++ b/CREDITS @@ -17,5 +17,6 @@ Contributors: Tim Morgan (github: seven1m) tsigo Werner Laurensse (github: ab3) + Svein-Erik Larsen (github: feinom) Feel free to add real names in addition to GitHub usernames. diff --git a/vimiumFrontend.js b/vimiumFrontend.js index d7c429cb..75225a78 100644 --- a/vimiumFrontend.js +++ b/vimiumFrontend.js @@ -141,6 +141,7 @@ function initializePreDomReady() { */ function initializeWhenEnabled() { document.addEventListener("keydown", onKeydown, true); + document.addEventListener("keypress", onKeypress, true); document.addEventListener("focus", onFocusCapturePhase, true); document.addEventListener("blur", onBlurCapturePhase, true); enterInsertModeIfElementIsFocused(); @@ -308,7 +309,7 @@ function toggleViewSourceCallback(url) { * * Note that some keys will only register keydown events and not keystroke events, e.g. ESC. */ -function onKeydown(event) { +function onKeypress(event) { var keyChar = ""; if (linkHintsModeActivated) @@ -316,36 +317,74 @@ function onKeydown(event) { // Ignore modifier keys by themselves. if (event.keyCode > 31) { - keyChar = getKeyChar(event); + keyChar = String.fromCharCode(event.charCode); // Enter insert mode when the user enables the native find interface. - if (keyChar == "f" && !event.shiftKey && isPrimaryModifierKey(event)) + if (keyChar == "f" && isPrimaryModifierKey(event)) { enterInsertMode(); return; } + } - if (keyChar != "") // Again, ignore just modifiers. Maybe this should replace the keyCode > 31 condition. + if (findMode) + { + if (keyChar) { - var modifiers = []; - - if (event.shiftKey) - keyChar = keyChar.toUpperCase(); - if (event.metaKey) - modifiers.push("m"); - if (event.ctrlKey) - modifiers.push("c"); - if (event.altKey) - modifiers.push("a"); - - for (var i in modifiers) - keyChar = modifiers[i] + "-" + keyChar; - - if (modifiers.length > 0 || keyChar.length > 1) - keyChar = "<" + keyChar + ">"; + handleKeyCharForFindMode(keyChar); + + // Don't let the space scroll us if we're searching. + if (event.keyCode == keyCodes.space) + event.preventDefault(); + } + } + + else if (!insertMode && !findMode) { + if (keyChar) { + if (currentCompletionKeys.indexOf(keyChar) != -1) { + event.preventDefault(); + event.stopPropagation(); + } + keyPort.postMessage({keyChar:keyChar, frameId:frameId}); } } +} + +function onKeydown(event) { + var keyChar = ""; + if (linkHintsModeActivated) + return; + + // handle modifiers being pressed.don't handle shiftKey alone (to avoid / being interpreted as ? + if (event.metaKey && event.keyCode > 31 || event.ctrlKey && event.keyCode > 31 || event.altKey && event.keyCode > 31) + { + if (event.keyCode > 31) + { + keyChar = getKeyChar(event); + + if (keyChar != "") // Again, ignore just modifiers. Maybe this should replace the keyCode > 31 condition. + { + var modifiers = []; + + if (event.shiftKey) + keyChar = keyChar.toUpperCase(); + if (event.metaKey) + modifiers.push("m"); + if (event.ctrlKey) + modifiers.push("c"); + if (event.altKey) + modifiers.push("a"); + + for (var i in modifiers) + keyChar = modifiers[i] + "-" + keyChar; + + if (modifiers.length > 0 || keyChar.length > 1) + keyChar = "<" + keyChar + ">"; + } + } + } + if (insertMode && isEscape(event)) { // Note that we can't programmatically blur out of Flash embeds from Javascript. @@ -359,14 +398,6 @@ function onKeydown(event) { { if (isEscape(event)) exitFindMode(); - else if (keyChar) - { - handleKeyCharForFindMode(keyChar); - - // Don't let the space scroll us if we're searching. - if (event.keyCode == keyCodes.space) - event.preventDefault(); - } // Don't let backspace take us back in history. else if (event.keyCode == keyCodes.backspace || event.keyCode == keyCodes.deleteKey) { @@ -382,12 +413,13 @@ function onKeydown(event) { } else if (!insertMode && !findMode) { if (keyChar) { - if (currentCompletionKeys.indexOf(keyChar) != -1) { - event.preventDefault(); - event.stopPropagation(); - } + if (currentCompletionKeys.indexOf(keyChar) != -1) { + event.preventDefault(); + event.stopPropagation(); + } + + keyPort.postMessage({keyChar:keyChar, frameId:frameId}); - keyPort.postMessage({keyChar:keyChar, frameId:frameId}); } else if (isEscape(event)) { keyPort.postMessage({keyChar:"", frameId:frameId}); -- cgit v1.2.3 From db0073f1b707aa48557f8d8347af66a48e3293a3 Mon Sep 17 00:00:00 2001 From: Ilya Sukhar Date: Wed, 20 Oct 2010 22:51:41 -0700 Subject: Refactor onKeypress and onKeydown a bit. --- vimiumFrontend.js | 65 +++++++++++++++++++++++-------------------------------- 1 file changed, 27 insertions(+), 38 deletions(-) diff --git a/vimiumFrontend.js b/vimiumFrontend.js index 75225a78..19e2e0a2 100644 --- a/vimiumFrontend.js +++ b/vimiumFrontend.js @@ -320,32 +320,26 @@ function onKeypress(event) { keyChar = String.fromCharCode(event.charCode); // Enter insert mode when the user enables the native find interface. - if (keyChar == "f" && isPrimaryModifierKey(event)) - { + if (keyChar == "f" && isPrimaryModifierKey(event)) { enterInsertMode(); return; } - } - if (findMode) - { - if (keyChar) - { - handleKeyCharForFindMode(keyChar); + if (keyChar) { + if (findMode) { + handleKeyCharForFindMode(keyChar); - // Don't let the space scroll us if we're searching. - if (event.keyCode == keyCodes.space) - event.preventDefault(); - } - } + // Don't let the space scroll us if we're searching. + if (event.keyCode == keyCodes.space) + event.preventDefault(); + } else if (!insertMode && !findMode) { + if (currentCompletionKeys.indexOf(keyChar) != -1) { + event.preventDefault(); + event.stopPropagation(); + } - else if (!insertMode && !findMode) { - if (keyChar) { - if (currentCompletionKeys.indexOf(keyChar) != -1) { - event.preventDefault(); - event.stopPropagation(); + keyPort.postMessage({keyChar:keyChar, frameId:frameId}); } - keyPort.postMessage({keyChar:keyChar, frameId:frameId}); } } } @@ -355,36 +349,32 @@ function onKeydown(event) { if (linkHintsModeActivated) return; - + // handle modifiers being pressed.don't handle shiftKey alone (to avoid / being interpreted as ? - if (event.metaKey && event.keyCode > 31 || event.ctrlKey && event.keyCode > 31 || event.altKey && event.keyCode > 31) - { - if (event.keyCode > 31) + if (event.metaKey && event.keyCode > 31 || event.ctrlKey && event.keyCode > 31 || event.altKey && event.keyCode > 31) { + keyChar = getKeyChar(event); + + if (keyChar != "") // Again, ignore just modifiers. Maybe this should replace the keyCode > 31 condition. { - keyChar = getKeyChar(event); - - if (keyChar != "") // Again, ignore just modifiers. Maybe this should replace the keyCode > 31 condition. - { - var modifiers = []; - - if (event.shiftKey) + var modifiers = []; + + if (event.shiftKey) keyChar = keyChar.toUpperCase(); - if (event.metaKey) + if (event.metaKey) modifiers.push("m"); - if (event.ctrlKey) + if (event.ctrlKey) modifiers.push("c"); - if (event.altKey) + if (event.altKey) modifiers.push("a"); - for (var i in modifiers) + for (var i in modifiers) keyChar = modifiers[i] + "-" + keyChar; - if (modifiers.length > 0 || keyChar.length > 1) + if (modifiers.length > 0 || keyChar.length > 1) keyChar = "<" + keyChar + ">"; - } } } - + if (insertMode && isEscape(event)) { // Note that we can't programmatically blur out of Flash embeds from Javascript. @@ -419,7 +409,6 @@ function onKeydown(event) { } keyPort.postMessage({keyChar:keyChar, frameId:frameId}); - } else if (isEscape(event)) { keyPort.postMessage({keyChar:"", frameId:frameId}); -- cgit v1.2.3 From ac4858bfe66563d5295d87c89322e5f138f1d191 Mon Sep 17 00:00:00 2001 From: Ilya Sukhar Date: Wed, 20 Oct 2010 22:53:16 -0700 Subject: Added keyboard layout improvements to the README. --- README.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/README.markdown b/README.markdown index 36e267bf..76805516 100644 --- a/README.markdown +++ b/README.markdown @@ -88,6 +88,7 @@ Release Notes - A new command (`gi`) to focus the first (or n-th) text input box on the page. - A new command (``) to open up multiple links at a time in new tabs. - Frame support. +- More robust support for non-US keyboard layouts. - Bug fixes. 1.19 (06/29/2010) -- cgit v1.2.3 From f7a534efe5d4c77c462955674dd4678bc10f2012 Mon Sep 17 00:00:00 2001 From: Ilya Sukhar Date: Wed, 20 Oct 2010 23:42:44 -0700 Subject: Implemented a workaround for the Chrome bug that broke the 'yy' command. Closes 206. Relevant chrome bug: http://code.google.com/p/chromium/issues/detail?id=55188 --- background_page.html | 11 ++++++++++- vimiumFrontend.js | 6 +++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/background_page.html b/background_page.html index 48084f77..4d03c99b 100644 --- a/background_page.html +++ b/background_page.html @@ -1,6 +1,7 @@ +