tAdd options for scriptfile, cookiefile and stylefile. And changing the default… | |
git clone git://src.adamsgaard.dk/surf | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 4ce3808684c5ea5d14eab0c3e24119784d2ae255 | |
parent 0b885f18e3aebee047e952620f8541491fe77b8a | |
Author: Christoph Lohmann <[email protected]> | |
Date: Wed, 31 Oct 2012 21:13:50 +0100 | |
Add options for scriptfile, cookiefile and stylefile. And changing the default | |
behaviour of buildpath to be more like in open(). | |
Diffstat: | |
A arg.h | 41 +++++++++++++++++++++++++++++… | |
M surf.1 | 12 ++++++++++++ | |
M surf.c | 98 ++++++++++++++++++-----------… | |
3 files changed, 109 insertions(+), 42 deletions(-) | |
--- | |
diff --git a/arg.h b/arg.h | |
t@@ -0,0 +1,41 @@ | |
+/* | |
+ * Copy me if you can. | |
+ * by 20h | |
+ */ | |
+ | |
+#ifndef __ARG_H__ | |
+#define __ARG_H__ | |
+ | |
+extern char *argv0; | |
+ | |
+#define USED(x) ((void)(x)) | |
+ | |
+#define ARGBEGIN for (argv0 = *argv, argv++, argc--;\ | |
+ argv[0] && argv[0][1]\ | |
+ && argv[0][0] == '-';\ | |
+ argc--, argv++) {\ | |
+ char _argc;\ | |
+ char **_argv;\ | |
+ if (argv[0][1] == '-' && argv[0][2] == '\0') {\ | |
+ argv++;\ | |
+ argc--;\ | |
+ break;\ | |
+ }\ | |
+ for (argv[0]++, _argv = argv; argv[0][0];\ | |
+ argv[0]++) {\ | |
+ if (_argv != argv)\ | |
+ break;\ | |
+ _argc = argv[0][0];\ | |
+ switch (_argc) | |
+ | |
+#define ARGEND }\ | |
+ USED(_argc);\ | |
+ }\ | |
+ USED(argv);\ | |
+ USED(argc); | |
+ | |
+#define EARGF(x) ((argv[1] == NULL)? ((x), abort(), (char *)0) :\ | |
+ (argc--, argv++, argv[0])) | |
+ | |
+#endif | |
+ | |
diff --git a/surf.1 b/surf.1 | |
t@@ -3,10 +3,13 @@ | |
surf \- simple webkit-based browser | |
.SH SYNOPSIS | |
.B surf | |
+.RB [-c\ cookiefile] | |
.RB [-e\ xid] | |
.RB [-i] | |
.RB [-p] | |
+.RB [-r\ scriptfile] | |
.RB [-s] | |
+.RB [-t\ stylefile] | |
.RB [-v] | |
.RB [-x] | |
.RB "URI" | |
t@@ -17,6 +20,9 @@ which makes it possible to embed it in another application. … | |
one can point surf to another URI by setting its XProperties. | |
.SH OPTIONS | |
.TP | |
+.B \-c cookiefile | |
+Specify the cookiefile to use. | |
+.TP | |
.B \-e xid | |
Reparents to window specified by xid. | |
.TP | |
t@@ -26,9 +32,15 @@ Disable Images | |
.B \-p | |
Disable Plugins | |
.TP | |
+.B \-r scriptfile | |
+Specify the user scriptfile. | |
+.TP | |
.B \-s | |
Disable Javascript | |
.TP | |
+.B \-t stylefile | |
+Specify the user stylefile. | |
+.TP | |
.B \-v | |
Prints version information to standard output, then exits. | |
.TP | |
diff --git a/surf.c b/surf.c | |
t@@ -20,6 +20,10 @@ | |
#include <JavaScriptCore/JavaScript.h> | |
#include <sys/file.h> | |
+#include "arg.h" | |
+ | |
+char *argv0; | |
+ | |
#define LENGTH(x) (sizeof x / sizeof x[0]) | |
#define COOKIEJAR_TYPE (cookiejar_get_type ()) | |
#define COOKIEJAR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), COOKIEJAR_… | |
t@@ -74,7 +78,6 @@ static Client *clients = NULL; | |
static GdkNativeWindow embed = 0; | |
static gboolean showxid = FALSE; | |
static char winid[64]; | |
-static char *progname; | |
static gboolean loadimage = 1, plugin = 1, script = 1, using_proxy = 0; | |
static char *buildpath(const char *path); | |
t@@ -138,10 +141,19 @@ buildpath(const char *path) { | |
FILE *f; | |
/* creating directory */ | |
- if(path[0] == '/') | |
+ if(path[0] == '/') { | |
apath = g_strdup(path); | |
- else | |
- apath = g_strconcat(g_get_home_dir(), "/", path, NULL); | |
+ } else if(path[0] == '~') { | |
+ if(path[1] == '/') { | |
+ apath = g_strconcat(g_get_home_dir(), &path[1], NULL); | |
+ } else { | |
+ apath = g_strconcat(g_get_home_dir(), "/", | |
+ &path[1], NULL); | |
+ } | |
+ } else { | |
+ apath = g_strconcat(g_get_current_dir(), "/", path, NULL); | |
+ } | |
+ | |
if((p = strrchr(apath, '/'))) { | |
*p = '\0'; | |
g_mkdir_with_parents(apath, 0700); | |
t@@ -153,6 +165,7 @@ buildpath(const char *path) { | |
g_chmod(apath, 0600); /* always */ | |
fclose(f); | |
} | |
+ | |
return apath; | |
} | |
t@@ -216,7 +229,7 @@ cookiejar_new(const char *filename, gboolean read_only) { | |
return g_object_new(COOKIEJAR_TYPE, | |
SOUP_COOKIE_JAR_TEXT_FILENAME, filename, | |
SOUP_COOKIE_JAR_READ_ONLY, read_only, NULL); | |
-} | |
+} | |
static void | |
cookiejar_set_property(GObject *self, guint prop_id, const GValue *value, GPar… | |
t@@ -628,7 +641,7 @@ newwindow(Client *c, const Arg *arg, gboolean noembed) { | |
const Arg a = { .v = (void *)cmd }; | |
char tmp[64]; | |
- cmd[i++] = progname; | |
+ cmd[i++] = argv0; | |
if(embed && !noembed) { | |
cmd[i++] = "-e"; | |
snprintf(tmp, LENGTH(tmp), "%u\n", (int)embed); | |
t@@ -905,7 +918,8 @@ updatewinid(Client *c) { | |
void | |
usage(void) { | |
fputs("surf - simple browser\n", stderr); | |
- die("usage: surf [-e xid] [-i] [-p] [-s] [-v] [-x] [uri]\n"); | |
+ die("usage: surf [-c cookiefile] [-e xid] [-i] [-p] [-r scriptfile]" | |
+ " [-s] [-t stylefile] [-v] [-x] [uri]\n"); | |
} | |
void | |
t@@ -928,49 +942,49 @@ zoom(Client *c, const Arg *arg) { | |
int | |
main(int argc, char *argv[]) { | |
- int i; | |
Arg arg; | |
- progname = argv[0]; | |
/* command line args */ | |
- for(i = 1, arg.v = NULL; i < argc && argv[i][0] == '-' && | |
- argv[i][1] != '\0' && argv[i][2] == '\0'; i++) { | |
- if(!strcmp(argv[i], "--")) { | |
- i++; | |
- break; | |
- } | |
- switch(argv[i][1]) { | |
- case 'e': | |
- if(++i < argc) | |
- embed = strtol(argv[i], NULL, 0); | |
- else | |
- usage(); | |
- break; | |
- case 'i': | |
- loadimage = 0; | |
- break; | |
- case 'p': | |
- plugin = 0; | |
- break; | |
- case 's': | |
- script = 0; | |
- break; | |
- case 'x': | |
- showxid = TRUE; | |
- break; | |
- case 'v': | |
- die("surf-"VERSION", ©2009-2012 surf engineers, see L… | |
- default: | |
- usage(); | |
- } | |
- } | |
- if(i < argc) | |
- arg.v = argv[i]; | |
+ ARGBEGIN { | |
+ case 'c': | |
+ cookiefile = EARGF(usage()); | |
+ break; | |
+ case 'e': | |
+ embed = strtol(EARGF(usage()), NULL, 0); | |
+ break; | |
+ case 'i': | |
+ loadimage = 0; | |
+ break; | |
+ case 'p': | |
+ plugin = 0; | |
+ break; | |
+ case 'r': | |
+ scriptfile = EARGF(usage()); | |
+ break; | |
+ case 's': | |
+ script = 0; | |
+ break; | |
+ case 't': | |
+ stylefile = EARGF(usage()); | |
+ break; | |
+ case 'x': | |
+ showxid = TRUE; | |
+ break; | |
+ case 'v': | |
+ die("surf-"VERSION", ©2009-2012 surf engineers, see LICENSE f… | |
+ default: | |
+ usage(); | |
+ } ARGEND; | |
+ if(argc > 0) | |
+ arg.v = argv[0]; | |
+ | |
setup(); | |
newclient(); | |
if(arg.v) | |
loaduri(clients, &arg); | |
gtk_main(); | |
cleanup(); | |
+ | |
return EXIT_SUCCESS; | |
} | |
+ |