aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorilya2009-11-28 21:46:51 -0800
committerilya2009-11-28 21:46:51 -0800
commitaddba68648a20435a5dc68274229cf1661c7edfe (patch)
treeab6cc3f262a4d0af05d3215314bcec29c0523d92
parent0c841e613bb0ecdbb367a630e7ed88b6dd7a85e6 (diff)
downloadvimium-addba68648a20435a5dc68274229cf1661c7edfe.tar.bz2
First pass at find interface. Still needs some UI love and a highlight-all feature (maybe).
-rw-r--r--background_page.html6
-rw-r--r--vimiumFrontend.js60
2 files changed, 63 insertions, 3 deletions
diff --git a/background_page.html b/background_page.html
index 64bd582b..23663839 100644
--- a/background_page.html
+++ b/background_page.html
@@ -204,10 +204,14 @@
keyToCommandRegistry['L'] = 'goForward';
keyToCommandRegistry['zi'] = 'zoomIn';
- keyToCommandRegistry['zo'] = 'zoomOut';
+ keyToCommandRegistry['zo'] = 'zoomOut';
keyToCommandRegistry['f'] = 'activateLinkHintsMode';
+ keyToCommandRegistry['/'] = 'enterFindMode';
+ keyToCommandRegistry['n'] = 'performFind';
+ keyToCommandRegistry['N'] = 'performBackwardsFind';
+
keyToCommandRegistry['J'] = nextTab;
keyToCommandRegistry['K'] = previousTab;
diff --git a/vimiumFrontend.js b/vimiumFrontend.js
index 735267e7..59fb9841 100644
--- a/vimiumFrontend.js
+++ b/vimiumFrontend.js
@@ -9,8 +9,10 @@ var settingsToLoad = ["scrollStepSize"];
var getCurrentUrlHandlers = []; // function(url)
-var keyCodes = { ESC: 27, backspace: 8, deleteKey: 46 };
+var keyCodes = { ESC: 27, backspace: 8, deleteKey: 46, enter: 13 };
var insertMode = false;
+var findMode = false;
+var findModeQuery = "";
var keyPort;
var settingPort;
var saveZoomLevelPort;
@@ -166,13 +168,31 @@ function onKeydown(event) {
keyChar = "<c-" + keyChar + ">";
}
+ // NOTE(ilya): Not really sure why yet but / yields 191 (¿) on my mac.
+ if (event.keyCode == 191) { keyChar = "/"; }
+
if (insertMode && event.keyCode == keyCodes.ESC)
{
// Remove focus so the user can't just get himself back into insert mode by typing in the same input box.
if (isInputOrText(event.srcElement)) { event.srcElement.blur(); }
exitInsertMode();
}
- else if (!insertMode && keyChar)
+ else if (findMode && event.keyCode == keyCodes.ESC)
+ exitFindMode();
+ else if (findMode)
+ {
+ if (keyChar)
+ handleKeyCharForFindMode(keyChar);
+ // Don't let backspace take us back in history.
+ else if (event.keyCode == keyCodes.backspace || event.keyCode == keyCodes.deleteKey)
+ {
+ handleDeleteForFindMode();
+ event.preventDefault();
+ }
+ else if (event.keyCode == keyCodes.enter)
+ handleEnterForFindMode();
+ }
+ else if (!insertMode && !findMode && keyChar)
keyPort.postMessage(keyChar);
}
@@ -201,6 +221,42 @@ function exitInsertMode() {
HUD.hide();
}
+function handleKeyCharForFindMode(keyChar) {
+ findModeQuery = findModeQuery + keyChar;
+ HUD.show("/" + findModeQuery);
+ performFind();
+}
+
+function handleDeleteForFindMode() {
+ findModeQuery = findModeQuery.substring(0, findModeQuery.length - 1);
+ HUD.show("/" + findModeQuery);
+ performFind();
+}
+
+function handleEnterForFindMode() {
+ exitFindMode();
+ performFind();
+}
+
+function performFind(backwards) {
+ window.find(findModeQuery, true, false, true, false, true, false);
+}
+
+function performBackwardsFind() {
+ window.find(findModeQuery, true, true, true, false, true, false);
+}
+
+function enterFindMode() {
+ findModeQuery = "";
+ findMode = true;
+ HUD.show("/");
+}
+
+function exitFindMode() {
+ findMode = false;
+ HUD.hide();
+}
+
HUD = {
show:function(text) {
HUD.displayElement().innerHTML = text;