diff options
| author | Christoph Lohmann <20h@r-36.net> | 2012-10-31 21:13:50 +0100 | 
|---|---|---|
| committer | Christoph Lohmann <20h@r-36.net> | 2012-10-31 21:13:50 +0100 | 
| commit | 4ce3808684c5ea5d14eab0c3e24119784d2ae255 (patch) | |
| tree | 798f6f8bbeb49552bba1618883c6168803c7a1d1 | |
| parent | 0b885f18e3aebee047e952620f8541491fe77b8a (diff) | |
| download | surf-4ce3808684c5ea5d14eab0c3e24119784d2ae255.tar.gz surf-4ce3808684c5ea5d14eab0c3e24119784d2ae255.tar.bz2 surf-4ce3808684c5ea5d14eab0c3e24119784d2ae255.zip | |
Add options for scriptfile, cookiefile and stylefile. And changing the default
behaviour of buildpath to be more like in open().
| -rw-r--r-- | arg.h | 41 | ||||
| -rw-r--r-- | surf.1 | 12 | ||||
| -rw-r--r-- | surf.c | 98 | 
3 files changed, 109 insertions, 42 deletions
| @@ -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 + @@ -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 @@ -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;  } + | 
