surf-git-20160127-searchengines.diff - sites - public wiki contents of suckless… | |
git clone git://git.suckless.org/sites | |
Log | |
Files | |
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, gpointe… | |
41 static gboolean contextmenu(WebKitWebView *view, GtkWidget *menu, | |
42 WebKitHitTestResult *target, gboolean keybo… | |
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, "abo… | |
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].… | |
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, ur… | |
67 + } | |
68 + return g_strrstr(uri, "://") || g_str_has_prefix(uri, "about:")… | |
69 + : g_strdup_printf("http://%s", uri); | |
70 +} | |
71 + | |
72 void | |
73 pasteuri(GtkClipboard *clipboard, const char *text, gpointer d) | |
74 { |