surf-websearch-20190510-d068a38.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
surf-websearch-20190510-d068a38.diff (3487B)
---
1 From c5ca896c5ba969b90f1e098d117c205a9b71d0db Mon Sep 17 00:00:00 2001
2 From: Bryon Meinka <bryon.meinka@gmail.com>
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_OPTIONS_CASE_INSENSITIVE |
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("_SURF_URI", "_SURF_GO", PROMPT_GO) },
40 { MODKEY, GDK_KEY_f, spawn, SETPROP("_SURF_FIND", "_SURF_FIND", PROMPT_FIND) },
41 { MODKEY, GDK_KEY_slash, spawn, SETPROP("_SURF_FIND", "_SURF_FIND", PROMPT_FIND) },
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 *h);
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