surf-git-20160127-searchengines.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
surf-git-20160127-searchengines.diff (2280B)
---
1 diff --git a/config.def.h b/config.def.h
2 index 93a3d49..df96d15 100644
3 --- a/config.def.h
4 +++ b/config.def.h
5 @@ -75,6 +75,13 @@ static SiteStyle styles[] = {
6 { ".*", "default.css" },
7 };
8
9 +/* search engines */
10 +static SearchEngine searchengines[] = {
11 + { "g", "http://www.google.de/search?q=%s" },
12 + { "leo", "http://dict.leo.org/ende?search=%s" },
13 + { "ddg", "https://duckduckgo.com/?q=%s" },
14 +};
15 +
16 #define MODKEY GDK_CONTROL_MASK
17
18 /* hotkeys */
19 diff --git a/surf.c b/surf.c
20 index 23c49bd..579848d 100644
21 --- a/surf.c
22 +++ b/surf.c
23 @@ -92,6 +92,11 @@ typedef struct {
24 G_DEFINE_TYPE(CookieJar, cookiejar, SOUP_TYPE_COOKIE_JAR_TEXT)
25
26 typedef struct {
27 + char *token;
28 + char *uri;
29 +} SearchEngine;
30 +
31 +typedef struct {
32 char *regex;
33 char *style;
34 regex_t re;
35 @@ -179,6 +184,7 @@ static void loaduri(Client *c, const Arg *arg);
36 static void navigate(Client *c, const Arg *arg);
37 static Client *newclient(void);
38 static void newwindow(Client *c, const Arg *arg, gboolean noembed);
39 +static gchar *parseuri(const gchar *uri);
40 static void pasteuri(GtkClipboard *clipboard, const char *text, gpointer d);
41 static gboolean contextmenu(WebKitWebView *view, GtkWidget *menu,
42 WebKitHitTestResult *target, gboolean keyboard,
43 @@ -840,8 +846,7 @@ loaduri(Client *c, const Arg *arg)
44 u = g_strdup_printf("file://%s", rp);
45 free(rp);
46 } else {
47 - u = g_strrstr(uri, "://") || g_str_has_prefix(uri, "about:") ? g_strdup(uri)
48 - : g_strdup_printf("http://%s", uri);
49 + u = parseuri(uri);
50 }
51
52 setatom(c, AtomUri, uri);
53 @@ -1173,6 +1178,21 @@ menuactivate(GtkMenuItem *item, Client *c)
54 }
55 }
56
57 +gchar *
58 +parseuri(const gchar *uri) {
59 + guint i;
60 +
61 + for (i = 0; i < LENGTH(searchengines); i++) {
62 + if (searchengines[i].token == NULL || searchengines[i].uri == NULL
63 + || *(uri + strlen(searchengines[i].token)) != ' ')
64 + continue;
65 + if (g_str_has_prefix(uri, searchengines[i].token))
66 + return g_strdup_printf(searchengines[i].uri, uri + strlen(searchengines[i].token) + 1);
67 + }
68 + return g_strrstr(uri, "://") || g_str_has_prefix(uri, "about:") ? g_strdup(uri)
69 + : g_strdup_printf("http://%s", uri);
70 +}
71 +
72 void
73 pasteuri(GtkClipboard *clipboard, const char *text, gpointer d)
74 {