From 58f503b391ee437dd5d4caf14c72479bc89895d1 Mon Sep 17 00:00:00 2001
From: Daniel Carl <danielcarl@gmx.de>
Date: Sat, 9 Feb 2013 18:18:25 +0100
Subject: [PATCH] Allow to use count for search (#6).

---
 doc/vimp.1.txt | 2 +-
 src/command.c  | 6 +++++-
 src/keybind.c  | 2 +-
 src/main.c     | 3 ---
 src/main.h     | 2 --
 5 files changed, 7 insertions(+), 8 deletions(-)

diff --git a/doc/vimp.1.txt b/doc/vimp.1.txt
index a6de7b4..aa0cc74 100644
--- a/doc/vimp.1.txt
+++ b/doc/vimp.1.txt
@@ -244,7 +244,7 @@ Yank the selected text into the primary and secondary clipboard.
 .B set
 Set configuration values.
 .TP
-.B search-{forward, backward}
+.IB [N] search-{forward, backward}
 Search in current page forward or backward.
 .TP
 .B inspect
diff --git a/src/command.c b/src/command.c
index f14a77f..36e26bd 100644
--- a/src/command.c
+++ b/src/command.c
@@ -388,7 +388,11 @@ gboolean command_search(const Arg* arg)
         webkit_web_view_mark_text_matches(vp.gui.webview, state->search_query, FALSE, 0);
         webkit_web_view_set_highlight_text_matches(vp.gui.webview, TRUE);
 #endif
-        webkit_web_view_search_text(vp.gui.webview, state->search_query, FALSE, forward, TRUE);
+        /* make sure we have a count greater than 0 */
+        vp.state.count = vp.state.count ? vp.state.count : 1;
+        do {
+            webkit_web_view_search_text(vp.gui.webview, state->search_query, FALSE, forward, TRUE);
+        } while (--vp.state.count);
     }
 
     return TRUE;
diff --git a/src/keybind.c b/src/keybind.c
index 3806c8a..dcd06eb 100644
--- a/src/keybind.c
+++ b/src/keybind.c
@@ -251,7 +251,7 @@ static gboolean keybind_keypress_callback(WebKitWebView* webview, GdkEventKey* e
         return TRUE;
     }
     /* allow mode keys and counts only in normal mode */
-    if (VP_MODE_NORMAL == vp.state.mode) {
+    if ((VP_MODE_SEARCH | VP_MODE_NORMAL) & vp.state.mode) {
         if (vp.state.modkey == 0 && ((keyval >= GDK_1 && keyval <= GDK_9)
                 || (keyval == GDK_0 && vp.state.count))) {
             /* append the new entered count to previous one */
diff --git a/src/main.c b/src/main.c
index 4eb89be..f2f7fea 100644
--- a/src/main.c
+++ b/src/main.c
@@ -471,9 +471,6 @@ gboolean vp_set_mode(Mode mode, gboolean clean)
             gtk_widget_grab_focus(GTK_WIDGET(vp.gui.webview));
             break;
 
-        case VP_MODE_SEARCH:
-            break;
-
         case VP_MODE_COMMAND:
         case VP_MODE_HINTING:
             gtk_widget_grab_focus(GTK_WIDGET(vp.gui.inputbox));
diff --git a/src/main.h b/src/main.h
index 552501e..5593bc8 100644
--- a/src/main.h
+++ b/src/main.h
@@ -230,9 +230,7 @@ typedef struct {
 
 /* behaviour */
 typedef struct {
-    /* command list: (key)name -> (value)Command  */
     GHashTable* commands;
-    /* keybindings */
     GSList*     keys;
     GString*    modkeys;
 } Behaviour;
-- 
2.20.1