iAllow user-agent switching. - surf - Surf web browser. Err gopher.r-36.net 70 i Err gopher.r-36.net 70 1Log /scm/surf//log.gph gopher.r-36.net 70 1Files /scm/surf//files.gph gopher.r-36.net 70 1Refs /scm/surf//refs.gph gopher.r-36.net 70 1README /scm/surf//file/README.gph gopher.r-36.net 70 1LICENSE /scm/surf//file/LICENSE.gph gopher.r-36.net 70 i--- Err gopher.r-36.net 70 1commit 0bf2efbd2b12bd7ac7e2cf90867f59ebdaee8e6b /scm/surf//commit/0bf2efbd2b12bd7ac7e2cf90867f59ebdaee8e6b.gph gopher.r-36.net 70 1parent 266e6562976a6aaaa1fadd3ecc6d72612cc7ce3e /scm/surf//commit/266e6562976a6aaaa1fadd3ecc6d72612cc7ce3e.gph gopher.r-36.net 70 hAuthor: Christoph Lohmann <20h@r-36.net> URL:mailto:20h@r-36.net gopher.r-36.net 70 iDate: Fri, 5 May 2017 21:44:27 +0200 Err gopher.r-36.net 70 i Err gopher.r-36.net 70 iAllow user-agent switching. Err gopher.r-36.net 70 i Err gopher.r-36.net 70 iDiffstat: Err gopher.r-36.net 70 i README | 8 ++++++++ Err gopher.r-36.net 70 i config.def.h | 24 +++++++++++++++++++++--- Err gopher.r-36.net 70 i surf.c | 12 +++++++++++- Err gopher.r-36.net 70 i useragents.txt | 3 +++ Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i4 files changed, 43 insertions(+), 4 deletions(-) Err gopher.r-36.net 70 i--- Err gopher.r-36.net 70 1diff --git a/README b/README /scm/surf//file/README.gph gopher.r-36.net 70 i@@ -8,6 +8,14 @@ In order to build surf you need GTK+ and Webkit/GTK+ header files. Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i In order to use the functionality of the url-bar, also install dmenu[0]. Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i+Surf is running a "download" script when a file needs to be downloaded and a Err gopher.r-36.net 70 i+"plumb" script when some URI needs to be opened, which is not beginning with Err gopher.r-36.net 70 i+"about:", "http://" or "https://". Please create them in your $PATH prior to Err gopher.r-36.net 70 i+using surf. Err gopher.r-36.net 70 i+ Err gopher.r-36.net 70 i+An example file for the User-Agent switching file is supplied in Err gopher.r-36.net 70 i+"useragents.txt". You may need to adapt them to the current world situation. Err gopher.r-36.net 70 i+ Err gopher.r-36.net 70 i Installation Err gopher.r-36.net 70 i ------------ Err gopher.r-36.net 70 i Edit config.mk to match your local setup (surf is installed into Err gopher.r-36.net 70 1diff --git a/config.def.h b/config.def.h /scm/surf//file/config.def.h.gph gopher.r-36.net 70 i@@ -29,6 +29,7 @@ static Bool strictssl = TRUE; /* strict means if untrusted SSL/TLS Err gopher.r-36.net 70 i static time_t sessiontime = 3600; Err gopher.r-36.net 70 i static Bool enablediskcache = TRUE; Err gopher.r-36.net 70 i static int diskcachebytes = 5 * 1024 * 1024; Err gopher.r-36.net 70 i+#define uafile "~/.surf/useragents.txt" Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i /* Webkit default features */ Err gopher.r-36.net 70 i static Bool enablescrollbars = TRUE; Err gopher.r-36.net 70 i@@ -71,7 +72,7 @@ static Bool insecureresources = FALSE; /* Whether to allow to load Err gopher.r-36.net 70 i * Now on TV: »What is the best User-Agent for me?« Err gopher.r-36.net 70 i * Result: None. Err gopher.r-36.net 70 i */ Err gopher.r-36.net 70 i-char *useragent = NULL; Err gopher.r-36.net 70 i+char *useragent = " "; Err gopher.r-36.net 70 i /* Err gopher.r-36.net 70 i * These are for the case some incompetent »web programmer« decided for you Err gopher.r-36.net 70 i * what is best for you. Err gopher.r-36.net 70 i@@ -92,8 +93,6 @@ static HttpHeader customheaders[] = { Err gopher.r-36.net 70 i /* key, value */ Err gopher.r-36.net 70 i /* Do-Not-Track. Haha! */ Err gopher.r-36.net 70 i { "DNT", "1" }, Err gopher.r-36.net 70 i- /* Best User-Agent ever. */ Err gopher.r-36.net 70 i- { "User-Agent", " "}, Err gopher.r-36.net 70 i /* We are a damn US imperialist. Change to cn, once Chinese communism Err gopher.r-36.net 70 i * has won.*/ Err gopher.r-36.net 70 i { "Accept-Language", "en-US,en;q=0.5" }, Err gopher.r-36.net 70 i@@ -106,7 +105,9 @@ static HttpHeader customheaders[] = { Err gopher.r-36.net 70 i #define PROMPT_GOTO "Go To" Err gopher.r-36.net 70 i #define PROMPT_FIND "Find" Err gopher.r-36.net 70 i #define PROMPT_SLASH "/" Err gopher.r-36.net 70 i+#define PROMPT_UA "Set User-Agent" Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i+/* Set the property of surf using the old value. */ Err gopher.r-36.net 70 i #define SETPROP(p, q, prompt) { \ Err gopher.r-36.net 70 i .v = (char *[]){ "/bin/sh", "-c", \ Err gopher.r-36.net 70 i "prop=\"`xprop -id $2 $0 " \ Err gopher.r-36.net 70 i@@ -117,6 +118,22 @@ static HttpHeader customheaders[] = { Err gopher.r-36.net 70 i } \ Err gopher.r-36.net 70 i } Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i+/* Err gopher.r-36.net 70 i+ * Set the property of surf using the old value and values supplied from a Err gopher.r-36.net 70 i+ * file. Err gopher.r-36.net 70 i+ */ Err gopher.r-36.net 70 i+#define SETPROPFROMFILE(p, q, prompt, file) { \ Err gopher.r-36.net 70 i+ .v = (char *[]){ "/bin/bash", "-c", \ Err gopher.r-36.net 70 i+ "prop=\"`{ xprop -id $2 $0 " \ Err gopher.r-36.net 70 i+ "| sed \"s/^$0(STRING) = \\(\\\\\"\\?\\)\\(.*\\)\\1$/\\2/\" " \ Err gopher.r-36.net 70 i+ "| xargs -0 printf %b; " \ Err gopher.r-36.net 70 i+ " [ -e $(eval echo $4) ] && cat $(eval echo $4); } " \ Err gopher.r-36.net 70 i+ "| dmenu -p \"$3\"`\" &&" \ Err gopher.r-36.net 70 i+ "xprop -id $2 -f $1 8u -set $1 \"$prop\"", \ Err gopher.r-36.net 70 i+ p, q, winid, prompt, file, NULL \ Err gopher.r-36.net 70 i+ } \ Err gopher.r-36.net 70 i+} Err gopher.r-36.net 70 i+ Err gopher.r-36.net 70 i /* DOWNLOAD(URI, referer) */ Err gopher.r-36.net 70 i #define DOWNLOAD(d, r) { \ Err gopher.r-36.net 70 i .v = (char *[]){ "/bin/sh", "-c", \ Err gopher.r-36.net 70 i@@ -186,6 +203,7 @@ static Key keys[] = { Err gopher.r-36.net 70 i { MODKEY, GDK_g, spawn, SETPROP("_SURF_URI", "_SURF_GO", PROMPT_GOTO) }, Err gopher.r-36.net 70 i { MODKEY, GDK_f, spawn, SETPROP("_SURF_FIND", "_SURF_FIND", PROMPT_FIND) }, Err gopher.r-36.net 70 i { MODKEY, GDK_slash, spawn, SETPROP("_SURF_FIND", "_SURF_FIND", PROMPT_SLASH) }, Err gopher.r-36.net 70 i+ { MODKEY, GDK_a, spawn, SETPROPFROMFILE("_SURF_UA", "_SURF_UA", PROMPT_UA, uafile) }, Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i { MODKEY, GDK_n, find, { .b = TRUE } }, Err gopher.r-36.net 70 i { MODKEY|GDK_SHIFT_MASK,GDK_n, find, { .b = FALSE } }, Err gopher.r-36.net 70 1diff --git a/surf.c b/surf.c /scm/surf//file/surf.c.gph gopher.r-36.net 70 i@@ -36,7 +36,7 @@ char *argv0; Err gopher.r-36.net 70 i #define COOKIEJAR_TYPE (cookiejar_get_type ()) Err gopher.r-36.net 70 i #define COOKIEJAR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), COOKIEJAR_TYPE, CookieJar)) Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i-enum { AtomFind, AtomGo, AtomUri, AtomLast }; Err gopher.r-36.net 70 i+enum { AtomFind, AtomGo, AtomUri, AtomUA, AtomLast }; Err gopher.r-36.net 70 i enum { Err gopher.r-36.net 70 i ClkDoc = WEBKIT_HIT_TEST_RESULT_CONTEXT_DOCUMENT, Err gopher.r-36.net 70 i ClkLink = WEBKIT_HIT_TEST_RESULT_CONTEXT_LINK, Err gopher.r-36.net 70 i@@ -1078,9 +1078,12 @@ newclient(void) Err gopher.r-36.net 70 i "enable-private-browsing", privatebrowsing, NULL); Err gopher.r-36.net 70 i g_object_set(G_OBJECT(settings), "enable-dns-prefetching", Err gopher.r-36.net 70 i dnsprefetching, NULL); Err gopher.r-36.net 70 i+ Err gopher.r-36.net 70 i if (!(ua = getenv("SURF_USERAGENT"))) Err gopher.r-36.net 70 i ua = useragent; Err gopher.r-36.net 70 i g_object_set(G_OBJECT(settings), "user-agent", ua, NULL); Err gopher.r-36.net 70 i+ setatom(c, AtomUA, ua); Err gopher.r-36.net 70 i+ Err gopher.r-36.net 70 i g_object_set(G_OBJECT(settings), Err gopher.r-36.net 70 i "auto-load-images", loadimages, NULL); Err gopher.r-36.net 70 i g_object_set(G_OBJECT(settings), Err gopher.r-36.net 70 i@@ -1372,6 +1375,7 @@ GdkFilterReturn Err gopher.r-36.net 70 i processx(GdkXEvent *e, GdkEvent *event, gpointer d) Err gopher.r-36.net 70 i { Err gopher.r-36.net 70 i Client *c = (Client *)d; Err gopher.r-36.net 70 i+ WebKitWebSettings *settings; Err gopher.r-36.net 70 i XPropertyEvent *ev; Err gopher.r-36.net 70 i Arg arg; Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i@@ -1386,6 +1390,11 @@ processx(GdkXEvent *e, GdkEvent *event, gpointer d) Err gopher.r-36.net 70 i arg.v = getatom(c, AtomGo); Err gopher.r-36.net 70 i loaduri(c, &arg); Err gopher.r-36.net 70 i return GDK_FILTER_REMOVE; Err gopher.r-36.net 70 i+ } else if (ev->atom == atoms[AtomUA]) { Err gopher.r-36.net 70 i+ settings = webkit_web_view_get_settings(c->view); Err gopher.r-36.net 70 i+ g_object_set(G_OBJECT(settings), "user-agent", Err gopher.r-36.net 70 i+ getatom(c, AtomUA), NULL); Err gopher.r-36.net 70 i+ return GDK_FILTER_REMOVE; Err gopher.r-36.net 70 i } Err gopher.r-36.net 70 i } Err gopher.r-36.net 70 i } Err gopher.r-36.net 70 i@@ -1488,6 +1497,7 @@ setup(void) Err gopher.r-36.net 70 i atoms[AtomFind] = XInternAtom(dpy, "_SURF_FIND", False); Err gopher.r-36.net 70 i atoms[AtomGo] = XInternAtom(dpy, "_SURF_GO", False); Err gopher.r-36.net 70 i atoms[AtomUri] = XInternAtom(dpy, "_SURF_URI", False); Err gopher.r-36.net 70 i+ atoms[AtomUA] = XInternAtom(dpy, "_SURF_UA", False); Err gopher.r-36.net 70 i Err gopher.r-36.net 70 i /* dirs and files */ Err gopher.r-36.net 70 i cookiefile = buildfile(cookiefile); Err gopher.r-36.net 70 1diff --git a/useragents.txt b/useragents.txt /scm/surf//file/useragents.txt.gph gopher.r-36.net 70 i@@ -0,0 +1,3 @@ Err gopher.r-36.net 70 i+Mozilla/5.0 (Android 4.4; Mobile; rv:41.0) Gecko/41.0 Firefox/41.0 Err gopher.r-36.net 70 i+Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.19 Safari/537.36 Err gopher.r-36.net 70 i+Mozilla/5.0 (X11; U; Unix; en-US) AppleWebKit/537.15 (KHTML, like Gecko) Chrome/24.0.1295.0 Safari/537.15 Surf/0.8 Err gopher.r-36.net 70 .