diff -r fee97b4579f2 config.def.h --- a/config.def.h Mon Sep 21 03:27:20 2009 +0200 +++ b/config.def.h Wed Sep 23 13:59:44 2009 +0200 @@ -30,3 +30,6 @@ { 0, GDK_Return, hideurl, { 0 }, UrlBar }, }; +static SearchEngine searchengines[] = { + { NULL, NULL }, +} diff -r fee97b4579f2 surf.c --- a/surf.c Mon Sep 21 03:27:20 2009 +0200 +++ b/surf.c Wed Sep 23 13:59:44 2009 +0200 @@ -58,6 +58,11 @@ KeyFocus focus; } Key; +typedef struct { + char *token; + char *uri; +} SearchEngine; + static Display *dpy; static Atom urlprop; static SoupCookieJar *cookiejar; @@ -92,6 +97,7 @@ static Client *newclient(void); static WebKitWebView *newwindow(WebKitWebView *v, WebKitWebFrame *f, Client *c); static void pasteurl(GtkClipboard *clipboard, const gchar *text, gpointer d); +static gchar *parseuri(const gchar *uri); static GdkFilterReturn processx(GdkXEvent *xevent, GdkEvent *event, gpointer d); static void print(Client *c, const Arg *arg); static void proccookies(SoupMessage *m, Client *c); @@ -348,14 +354,33 @@ g_free(uri); } +gchar * +parseuri(const gchar *uri) { + guint i; + gchar *prefix, *ret = NULL; + for (i = 0; i < LENGTH(searchengines); i++) { + if (searchengines[i].token == NULL || searchengines[i].uri == NULL) + continue; + prefix = g_strdup_printf("%s ", searchengines[i].token); + if(g_str_has_prefix(uri, prefix)) { + ret = g_strdup_printf(searchengines[i].uri, uri+(strlen(searchengines[i].token) + 1)); + g_free(prefix); + break; + } + } + if (ret == NULL) + ret = g_strrstr(uri, "://") ? g_strdup(uri) : g_strdup_printf("http://%s", uri); + + return ret; +} + void loaduri(Client *c, const Arg *arg) { gchar *u; const gchar *uri = (gchar *)arg->v; if(!uri) uri = gtk_entry_get_text(GTK_ENTRY(c->urlbar)); - u = g_strrstr(uri, "://") ? g_strdup(uri) - : g_strdup_printf("http://%s", uri); + u = parseuri(uri); webkit_web_view_load_uri(c->view, u); c->progress = 0; c->title = copystr(&c->title, u);