summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Christoph Lohmann 2012-10-31 21:13:50 +0100
committerGravatar Christoph Lohmann 2012-10-31 21:13:50 +0100
commit4ce3808684c5ea5d14eab0c3e24119784d2ae255 (patch)
tree798f6f8bbeb49552bba1618883c6168803c7a1d1
parentAdd different progress colors when using proxy. (diff)
Add options for scriptfile, cookiefile and stylefile. And changing the default
behaviour of buildpath to be more like in open().
Diffstat (limited to '')
-rw-r--r--arg.h41
-rw-r--r--surf.112
-rw-r--r--surf.c98
3 files changed, 109 insertions, 42 deletions
diff --git a/arg.h b/arg.h
new file mode 100644
index 0000000..6414822
--- /dev/null
+++ b/arg.h
@@ -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
index 8cf8c28..6cd4044 100644
--- a/surf.1
+++ b/surf.1
@@ -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"
@@ -17,6 +20,9 @@ which makes it possible to embed it in another application. Furthermore,
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
@@ -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
index 4247de2..3b291b5 100644
--- a/surf.c
+++ b/surf.c
@@ -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_TYPE, CookieJar))
@@ -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);
@@ -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);
@@ -153,6 +165,7 @@ buildpath(const char *path) {
g_chmod(apath, 0600); /* always */
fclose(f);
}
+
return apath;
}
@@ -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, GParamSpec *pspec) {
@@ -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);
@@ -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
@@ -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 LICENSE for details\n");
- 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 for details\n");
+ default:
+ usage();
+ } ARGEND;
+ if(argc > 0)
+ arg.v = argv[0];
+
setup();
newclient();
if(arg.v)
loaduri(clients, &arg);
gtk_main();
cleanup();
+
return EXIT_SUCCESS;
}
+