summaryrefslogtreecommitdiff
path: root/src/uicmd.cc
diff options
context:
space:
mode:
authorJohannes Hofmann <Johannes.Hofmann@gmx.de>2013-07-23 23:24:52 +0200
committerJohannes Hofmann <Johannes.Hofmann@gmx.de>2013-07-23 23:24:52 +0200
commit97f3d3532eee90f6122703912263924eb6b7ca33 (patch)
tree07659aa38cd1101d865c5dd4b25035343c65d5c1 /src/uicmd.cc
parent8f86bdbd31d4b8a38fec04acbc3b853178495d4c (diff)
add search from address bar
Add the possibility to search from address bar by entering a prefix of a search_url label followed by a blank followed by the search term. Submitted by: Aki Helin <aki.helin@iki.fi> with some modifications.
Diffstat (limited to 'src/uicmd.cc')
-rw-r--r--src/uicmd.cc33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/uicmd.cc b/src/uicmd.cc
index e286ee9c..84e7e4cd 100644
--- a/src/uicmd.cc
+++ b/src/uicmd.cc
@@ -70,6 +70,7 @@ static const char *save_dir = "";
*/
static BrowserWindow *UIcmd_tab_new(CustTabs *tabs, UI *old_ui, int focus);
static void close_tab_btn_cb (Fl_Widget *w, void *cb_data);
+static char *UIcmd_make_search_str(const char *str);
//----------------------------------------------------------------------------
@@ -649,6 +650,33 @@ void a_UIcmd_close_all_bw(void *)
}
/*
+ * Return a search string of the suffix if str starts with a
+ * prefix of a search engine name and a blank
+ */
+static char *UIcmd_find_search_str(const char *str)
+{
+ int p;
+ char *url = NULL;
+ int len = strcspn(str, " ");
+
+ if (len > 0 && str[len] != '\0') {
+ /* we found a ' ' in str, check whether the first part of str
+ * is a prefix of a search_url label
+ */
+ for (p = 0; p < dList_length(prefs.search_urls); p++) {
+ const char *search =
+ (const char *)dList_nth_data(prefs.search_urls, p);
+ if (strncasecmp(str, search, len) == 0) {
+ prefs.search_url_idx = p;
+ url = UIcmd_make_search_str(str + len + 1);
+ break;
+ }
+ }
+ }
+ return url;
+}
+
+/*
* Open a new URL in the given browser window.
*
* our custom "file:" URIs are normalized here too.
@@ -656,10 +684,14 @@ void a_UIcmd_close_all_bw(void *)
void a_UIcmd_open_urlstr(void *vbw, const char *urlstr)
{
char *new_urlstr;
+ char *search_urlstr = NULL;
DilloUrl *url;
int ch;
BrowserWindow *bw = (BrowserWindow*)vbw;
+ if ((search_urlstr = UIcmd_find_search_str(urlstr))) {
+ urlstr = search_urlstr;
+ }
if (urlstr && *urlstr) {
/* Filter URL string */
new_urlstr = a_Url_string_strip_delimiters(urlstr);
@@ -686,6 +718,7 @@ void a_UIcmd_open_urlstr(void *vbw, const char *urlstr)
a_Url_free(url);
}
}
+ dFree(search_urlstr);
}
/*