[hackers] [surf] Add plumbing functionality. || Christoph Lohmann

From: <git_AT_suckless.org>
Date: Mon, 19 Jan 2015 22:16:25 +0100 (CET)

commit 9c3b5ad35389f1930834bf04341eb0c3514a850f
Author: Christoph Lohmann <20h_AT_r-36.net>
Date: Mon Jan 19 22:15:18 2015 +0100

    Add plumbing functionality.

diff --git a/config.def.h b/config.def.h
index 7b5cf8d..2baafef 100644
--- a/config.def.h
+++ b/config.def.h
_AT_@ -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
index 72d26e7..9b75829 100644
--- a/surf.c
+++ b/surf.c
_AT_@ -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);
_AT_@ -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);
_AT_@ -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 *
_AT_@ -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;
Received on Mon Jan 19 2015 - 22:16:25 CET

This archive was generated by hypermail 2.3.0 : Mon Jan 19 2015 - 22:24:14 CET