Introduction
Introduction Statistics Contact Development Disclaimer Help
tMajor styles update. - surf - customized build of surf, the suckless webkit br…
git clone git://src.adamsgaard.dk/surf
Log
Files
Refs
README
LICENSE
---
commit c2da2bae5dbca73f26fe77bb8080e2a90d3cbb1d
parent c467e5a3b3f3e1d69b64d31a166aa9d69336ef53
Author: Christoph Lohmann <[email protected]>
Date: Sat, 17 Jan 2015 07:19:48 +0100
Major styles update.
In config.h there is now some styles array to apply site-specific styles.
This can be toggled using the -mM flags. If a stylefile is manually specified,
tthen this will overwrite everything.
Diffstat:
M config.def.h | 9 ++++++++-
M surf.1 | 9 ++++++++-
M surf.c | 77 +++++++++++++++++++++++++++--…
3 files changed, 84 insertions(+), 11 deletions(-)
---
diff --git a/config.def.h b/config.def.h
t@@ -2,8 +2,8 @@
static char *useragent = "Mozilla/5.0 (X11; U; Unix; en-US) "
"AppleWebKit/537.15 (KHTML, like Gecko) Chrome/24.0.1295.0 "
"Safari/537.15 Surf/"VERSION;
-static char *stylefile = "~/.surf/style.css";
static char *scriptfile = "~/.surf/script.js";
+static char *styledir = "~/.surf/styles/";
static Bool kioskmode = FALSE; /* Ignore shortcuts */
static Bool showindicators = TRUE; /* Show indicators in window title */
t@@ -27,6 +27,7 @@ static Bool enablespatialbrowsing = TRUE;
static Bool enableplugins = TRUE;
static Bool enablescripts = TRUE;
static Bool enableinspector = TRUE;
+static Bool enablestyles = TRUE;
static Bool loadimages = TRUE;
static Bool hidebackground = FALSE;
static Bool allowgeolocation = TRUE;
t@@ -49,6 +50,12 @@ static Bool allowgeolocation = TRUE;
} \
}
+/* styles */
+static SiteStyle styles[] = {
+ /* regexp file in $styledir */
+ { ".*", "default.css" },
+};
+
#define MODKEY GDK_CONTROL_MASK
/* hotkeys */
diff --git a/surf.1 b/surf.1
t@@ -3,7 +3,7 @@
surf \- simple webkit-based browser
.SH SYNOPSIS
.B surf
-.RB [-bBfFgGiIkKnNpPsSvx]
+.RB [-bBfFgGiIkKmMnNpPsSvx]
.RB [-a\ cookiepolicies]
.RB [-c\ cookiefile]
.RB [-e\ xid]
t@@ -68,6 +68,12 @@ Disable kiosk mode (disable key strokes and right click)
.B \-K
Enable kiosk mode (disable key strokes and right click)
.TP
+.B \-m
+Disable the site-specific styles.
+.TP
+.B \-M
+Enable the site-specific styles.
+.TP
.B \-n
Disable the Web Inspector (Developer Tools).
.TP
t@@ -93,6 +99,7 @@ Enable Javascript
.B \-t stylefile
Specify the user
.I stylefile.
+This does disable the site-specific styles.
.TP
.B \-u useragent
Specify the
diff --git a/surf.c b/surf.c
t@@ -23,6 +23,7 @@
#include <sys/file.h>
#include <libgen.h>
#include <stdarg.h>
+#include <regex.h>
#include "arg.h"
t@@ -71,6 +72,12 @@ typedef struct {
G_DEFINE_TYPE(CookieJar, cookiejar, SOUP_TYPE_COOKIE_JAR_TEXT)
+typedef struct {
+ char *regex;
+ char *style;
+ regex_t re;
+} SiteStyle;
+
static Display *dpy;
static Atom atoms[AtomLast];
static Client *clients = NULL;
t@@ -82,6 +89,7 @@ static char togglestat[8];
static char pagestat[3];
static GTlsDatabase *tlsdb;
static int policysel = 0;
+static char *stylefile = NULL;
static void addaccelgroup(Client *c);
static void beforerequest(WebKitWebView *w, WebKitWebFrame *f,
t@@ -127,6 +135,8 @@ static const char *getatom(Client *c, int a);
static void gettogglestat(Client *c);
static void getpagestat(Client *c);
static char *geturi(Client *c);
+static gchar *getstyle(const char *uri);
+
static gboolean initdownload(WebKitWebView *v, WebKitDownload *o, Client *c);
static void inspector(Client *c, const Arg *arg);
t@@ -533,6 +543,19 @@ geturi(Client *c) {
return uri;
}
+static gchar *
+getstyle(const char *uri) {
+ int i;
+
+ for(i = 0; i < LENGTH(styles); i++) {
+ if(styles[i].regex && !regexec(&(styles[i].re), uri, 0,
+ NULL, 0)) {
+ return g_strconcat("file://", styles[i].style, NULL);
+ }
+ }
+ return g_strdup("");
+}
+
static gboolean
initdownload(WebKitWebView *view, WebKitDownload *o, Client *c) {
Arg arg;
t@@ -629,6 +652,7 @@ loadstatuschange(WebKitWebView *view, GParamSpec *pspec, C…
WebKitWebFrame *frame;
WebKitWebDataSource *src;
WebKitNetworkRequest *request;
+ WebKitWebSettings *set = webkit_web_view_get_settings(c->view);
SoupMessage *msg;
char *uri;
t@@ -644,6 +668,11 @@ loadstatuschange(WebKitWebView *view, GParamSpec *pspec, …
& SOUP_MESSAGE_CERTIFICATE_TRUSTED);
}
setatom(c, AtomUri, uri);
+
+ if(stylefile == NULL && enablestyles) {
+ g_object_set(G_OBJECT(set), "user-stylesheet-uri",
+ getstyle(uri), NULL);
+ }
break;
case WEBKIT_LOAD_FINISHED:
c->progress = 100;
t@@ -702,7 +731,7 @@ newclient(void) {
GdkGeometry hints = { 1, 1 };
GdkScreen *screen;
gdouble dpi;
- char *uri, *ua;
+ char *uri = NULL, *ua;
if(!(c = calloc(1, sizeof(Client))))
die("Cannot malloc!\n");
t@@ -832,8 +861,10 @@ newclient(void) {
if(!(ua = getenv("SURF_USERAGENT")))
ua = useragent;
g_object_set(G_OBJECT(settings), "user-agent", ua, NULL);
- uri = g_strconcat("file://", stylefile, NULL);
- g_object_set(G_OBJECT(settings), "user-stylesheet-uri", uri, NULL);
+ if (stylefile != NULL) {
+ uri = g_strconcat("file://", stylefile, NULL);
+ g_object_set(G_OBJECT(settings), "user-stylesheet-uri", uri, N…
+ }
g_object_set(G_OBJECT(settings), "auto-load-images", loadimages,
NULL);
g_object_set(G_OBJECT(settings), "enable-plugins", enableplugins,
t@@ -888,7 +919,8 @@ newclient(void) {
fullscreen(c, NULL);
}
- g_free(uri);
+ if(stylefile != NULL)
+ g_free(uri);
setatom(c, AtomFind, "");
setatom(c, AtomUri, "about:blank");
t@@ -1094,6 +1126,7 @@ setatom(Client *c, int a, const char *v) {
static void
setup(void) {
+ int i;
char *proxy;
char *new_proxy;
SoupURI *puri;
t@@ -1114,7 +1147,23 @@ setup(void) {
/* dirs and files */
cookiefile = buildpath(cookiefile);
scriptfile = buildpath(scriptfile);
- stylefile = buildpath(stylefile);
+ styledir = buildpath(styledir);
+ if(stylefile == NULL && enablestyles) {
+ for(i = 0; i < LENGTH(styles); i++) {
+ if(regcomp(&(styles[i].re), styles[i].regex,
+ REG_EXTENDED)) {
+ fprintf(stderr,
+ "Could not compile regex: %s\n",
+ styles[i].regex);
+ styles[i].regex = NULL;
+ }
+ styles[i].style = buildpath(
+ g_strconcat(styledir,
+ styles[i].style, NULL));
+ }
+ } else {
+ stylefile = buildpath(stylefile);
+ }
/* request handler */
s = webkit_get_default_session();
t@@ -1282,12 +1331,16 @@ togglescrollbars(Client *c, const Arg *arg) {
static void
togglestyle(Client *c, const Arg *arg) {
- WebKitWebSettings *settings;
+ WebKitWebSettings *settings = webkit_web_view_get_settings(c->view);
char *uri;
- settings = webkit_web_view_get_settings(c->view);
g_object_get(G_OBJECT(settings), "user-stylesheet-uri", &uri, NULL);
- uri = uri[0] ? g_strdup("") : g_strconcat("file://", stylefile, NULL);
+ if(stylefile == NULL && enablestyles) {
+ uri = (uri && uri[0])? g_strdup("") : getstyle(geturi(c));
+ } else {
+ uri = uri[0]? g_strdup("") : g_strconcat("file://",
+ stylefile, NULL);
+ }
g_object_set(G_OBJECT(settings), "user-stylesheet-uri", uri, NULL);
updatetitle(c);
t@@ -1318,7 +1371,7 @@ gettogglestat(Client *c){
togglestat[p++] = value? 'V': 'v';
g_object_get(G_OBJECT(settings), "user-stylesheet-uri", &uri, NULL);
- togglestat[p++] = uri[0] ? 'M': 'm';
+ togglestat[p++] = (uri && uri[0]) ? 'M': 'm';
togglestat[p] = '\0';
}
t@@ -1451,6 +1504,12 @@ main(int argc, char *argv[]) {
case 'K':
kioskmode = 1;
break;
+ case 'm':
+ enablestyles = 0;
+ break;
+ case 'M':
+ enablestyles = 1;
+ break;
case 'n':
enableinspector = 0;
break;
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.