surf-websearch-20190510-d068a38.diff - sites - public wiki contents of suckless… | |
git clone git://git.suckless.org/sites | |
Log | |
Files | |
Refs | |
--- | |
surf-websearch-20190510-d068a38.diff (3487B) | |
--- | |
1 From c5ca896c5ba969b90f1e098d117c205a9b71d0db Mon Sep 17 00:00:00 2001 | |
2 From: Bryon Meinka <[email protected]> | |
3 Date: Sat, 11 May 2019 00:52:29 -0400 | |
4 Subject: [PATCH] Web Search | |
5 | |
6 --- | |
7 config.def.h | 10 ++++++++++ | |
8 surf.c | 20 +++++++++++++++++++- | |
9 2 files changed, 29 insertions(+), 1 deletion(-) | |
10 | |
11 diff --git a/config.def.h b/config.def.h | |
12 index 34265f6..69657bf 100644 | |
13 --- a/config.def.h | |
14 +++ b/config.def.h | |
15 @@ -6,6 +6,7 @@ static char *styledir = "~/.surf/styles/"; | |
16 static char *certdir = "~/.surf/certificates/"; | |
17 static char *cachedir = "~/.surf/cache/"; | |
18 static char *cookiefile = "~/.surf/cookies.txt"; | |
19 +static char *searchurl = "duckduckgo.com/?q=%s"; | |
20 | |
21 /* Webkit default features */ | |
22 /* Highest priority value will be used. | |
23 @@ -76,6 +77,14 @@ static WebKitFindOptions findopts = WEBKIT_FIND_OPTIO… | |
24 } \ | |
25 } | |
26 | |
27 +#define SEARCH() { \ | |
28 + .v = (const char *[]){ "/bin/sh", "-c", \ | |
29 + "xprop -id $1 -f $2 8u -set $2 \"" \ | |
30 + "$(dmenu -p Search: -w $1 < /dev/null)\"", \ | |
31 + "surf-search", winid, "_SURF_SEARCH", NULL \ | |
32 + } \ | |
33 +} | |
34 + | |
35 /* DOWNLOAD(URI, referer) */ | |
36 #define DOWNLOAD(u, r) { \ | |
37 .v = (const char *[]){ "st", "-e", "/bin/sh", "-c",\ | |
38 @@ -133,6 +142,7 @@ static Key keys[] = { | |
39 { MODKEY, GDK_KEY_g, spawn, SETPROP("_… | |
40 { MODKEY, GDK_KEY_f, spawn, SETPROP("_… | |
41 { MODKEY, GDK_KEY_slash, spawn, SETPROP("_… | |
42 + { MODKEY, GDK_KEY_s, spawn, SEARCH() }, | |
43 | |
44 { 0, GDK_KEY_Escape, stop, { 0 } }, | |
45 { MODKEY, GDK_KEY_c, stop, { 0 } }, | |
46 diff --git a/surf.c b/surf.c | |
47 index 2b54e3c..077fb76 100644 | |
48 --- a/surf.c | |
49 +++ b/surf.c | |
50 @@ -35,7 +35,7 @@ | |
51 #define LENGTH(x) (sizeof(x) / sizeof(x[0])) | |
52 #define CLEANMASK(mask) (mask & (MODKEY|GDK_SHIFT_MASK)) | |
53 | |
54 -enum { AtomFind, AtomGo, AtomUri, AtomLast }; | |
55 +enum { AtomFind, AtomSearch, AtomGo, AtomUri, AtomLast }; | |
56 | |
57 enum { | |
58 OnDoc = WEBKIT_HIT_TEST_RESULT_CONTEXT_DOCUMENT, | |
59 @@ -231,6 +231,7 @@ static void togglefullscreen(Client *c, const Arg *a… | |
60 static void togglecookiepolicy(Client *c, const Arg *a); | |
61 static void toggleinspector(Client *c, const Arg *a); | |
62 static void find(Client *c, const Arg *a); | |
63 +static void search(Client *c, const Arg *a); | |
64 | |
65 /* Buttons */ | |
66 static void clicknavigate(Client *c, const Arg *a, WebKitHitTestResult … | |
67 @@ -326,6 +327,7 @@ setup(void) | |
68 | |
69 /* atoms */ | |
70 atoms[AtomFind] = XInternAtom(dpy, "_SURF_FIND", False); | |
71 + atoms[AtomSearch] = XInternAtom(dpy, "_SURF_SEARCH", False); | |
72 atoms[AtomGo] = XInternAtom(dpy, "_SURF_GO", False); | |
73 atoms[AtomUri] = XInternAtom(dpy, "_SURF_URI", False); | |
74 | |
75 @@ -577,6 +579,19 @@ loaduri(Client *c, const Arg *a) | |
76 g_free(url); | |
77 } | |
78 | |
79 +void | |
80 +search(Client *c, const Arg *a) | |
81 +{ | |
82 + Arg arg; | |
83 + char *url; | |
84 + | |
85 + url = g_strdup_printf(searchurl, a->v); | |
86 + arg.v = url; | |
87 + loaduri(c, &arg); | |
88 + | |
89 + g_free(url); | |
90 +} | |
91 + | |
92 const char * | |
93 geturi(Client *c) | |
94 { | |
95 @@ -1311,6 +1326,9 @@ processx(GdkXEvent *e, GdkEvent *event, gpointer d) | |
96 find(c, NULL); | |
97 | |
98 return GDK_FILTER_REMOVE; | |
99 + } else if (ev->atom == atoms[AtomSearch]) { | |
100 + a.v = getatom(c, AtomSearch); | |
101 + search(c, &a); | |
102 } else if (ev->atom == atoms[AtomGo]) { | |
103 a.v = getatom(c, AtomGo); | |
104 loaduri(c, &a); | |
105 -- | |
106 2.21.0 | |
107 |