tAdd plumbing functionality. - surf - customized build of surf, the suckless we… | |
git clone git://src.adamsgaard.dk/surf | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 9c3b5ad35389f1930834bf04341eb0c3514a850f | |
parent 7c34d5061e372d44e20a27df375d785656614935 | |
Author: Christoph Lohmann <[email protected]> | |
Date: Mon, 19 Jan 2015 22:15:18 +0100 | |
Add plumbing functionality. | |
Diffstat: | |
M config.def.h | 7 +++++++ | |
M surf.c | 23 +++++++++++++++++++++-- | |
2 files changed, 28 insertions(+), 2 deletions(-) | |
--- | |
diff --git a/config.def.h b/config.def.h | |
t@@ -53,6 +53,13 @@ static Bool allowgeolocation = TRUE; | |
} \ | |
} | |
+/* PLUMB(URI) */ | |
+#define PLUMB(u) {\ | |
+ .v = (char *[]){ "/bin/sh", "-c", \ | |
+ "xdg-open \"$0\"", u, NULL \ | |
+ } \ | |
+} | |
+ | |
/* styles */ | |
/* | |
* The iteration will stop at the first match, beginning at the beginning of | |
diff --git a/surf.c b/surf.c | |
t@@ -95,7 +95,7 @@ static SoupCache *diskcache = NULL; | |
static void addaccelgroup(Client *c); | |
static void beforerequest(WebKitWebView *w, WebKitWebFrame *f, | |
WebKitWebResource *r, WebKitNetworkRequest *req, | |
- WebKitNetworkResponse *resp, gpointer d); | |
+ WebKitNetworkResponse *resp, Client *c); | |
static char *buildpath(const char *path); | |
static gboolean buttonrelease(WebKitWebView *web, GdkEventButton *e, | |
GList *gl); | |
t@@ -138,6 +138,8 @@ static void getpagestat(Client *c); | |
static char *geturi(Client *c); | |
static gchar *getstyle(const char *uri); | |
+static void handleplumb(Client *c, WebKitWebView *w, const gchar *uri); | |
+ | |
static gboolean initdownload(WebKitWebView *v, WebKitDownload *o, Client *c); | |
static void inspector(Client *c, const Arg *arg); | |
t@@ -209,11 +211,19 @@ addaccelgroup(Client *c) { | |
static void | |
beforerequest(WebKitWebView *w, WebKitWebFrame *f, WebKitWebResource *r, | |
WebKitNetworkRequest *req, WebKitNetworkResponse *resp, | |
- gpointer d) { | |
+ Client *c) { | |
const gchar *uri = webkit_network_request_get_uri(req); | |
if(g_str_has_suffix(uri, "/favicon.ico")) | |
webkit_network_request_set_uri(req, "about:blank"); | |
+ | |
+ if(!g_str_has_prefix(uri, "http://") \ | |
+ && !g_str_has_prefix(uri, "https://") \ | |
+ && !g_str_has_prefix(uri, "about:") \ | |
+ && strlen(uri) > 0) { | |
+ printf("Handle plumb: %s\n", uri); | |
+ handleplumb(c, w, uri); | |
+ } | |
} | |
static char * | |
t@@ -561,6 +571,15 @@ getstyle(const char *uri) { | |
return g_strdup(""); | |
} | |
+static void | |
+handleplumb(Client *c, WebKitWebView *w, const gchar *uri) { | |
+ Arg arg; | |
+ | |
+ webkit_web_view_stop_loading(w); | |
+ arg = (Arg)PLUMB((char *)uri); | |
+ spawn(c, &arg); | |
+} | |
+ | |
static gboolean | |
initdownload(WebKitWebView *view, WebKitDownload *o, Client *c) { | |
Arg arg; |