Add options for scriptfile, cookiefile and stylefile. And changing the default
behaviour of buildpath to be more like in open().
This commit is contained in:
parent
0b885f18e3
commit
4ce3808684
3 changed files with 109 additions and 42 deletions
41
arg.h
Normal file
41
arg.h
Normal file
|
@ -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
|
||||||
|
|
12
surf.1
12
surf.1
|
@ -3,10 +3,13 @@
|
||||||
surf \- simple webkit-based browser
|
surf \- simple webkit-based browser
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
.B surf
|
.B surf
|
||||||
|
.RB [-c\ cookiefile]
|
||||||
.RB [-e\ xid]
|
.RB [-e\ xid]
|
||||||
.RB [-i]
|
.RB [-i]
|
||||||
.RB [-p]
|
.RB [-p]
|
||||||
|
.RB [-r\ scriptfile]
|
||||||
.RB [-s]
|
.RB [-s]
|
||||||
|
.RB [-t\ stylefile]
|
||||||
.RB [-v]
|
.RB [-v]
|
||||||
.RB [-x]
|
.RB [-x]
|
||||||
.RB "URI"
|
.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.
|
one can point surf to another URI by setting its XProperties.
|
||||||
.SH OPTIONS
|
.SH OPTIONS
|
||||||
.TP
|
.TP
|
||||||
|
.B \-c cookiefile
|
||||||
|
Specify the cookiefile to use.
|
||||||
|
.TP
|
||||||
.B \-e xid
|
.B \-e xid
|
||||||
Reparents to window specified by xid.
|
Reparents to window specified by xid.
|
||||||
.TP
|
.TP
|
||||||
|
@ -26,9 +32,15 @@ Disable Images
|
||||||
.B \-p
|
.B \-p
|
||||||
Disable Plugins
|
Disable Plugins
|
||||||
.TP
|
.TP
|
||||||
|
.B \-r scriptfile
|
||||||
|
Specify the user scriptfile.
|
||||||
|
.TP
|
||||||
.B \-s
|
.B \-s
|
||||||
Disable Javascript
|
Disable Javascript
|
||||||
.TP
|
.TP
|
||||||
|
.B \-t stylefile
|
||||||
|
Specify the user stylefile.
|
||||||
|
.TP
|
||||||
.B \-v
|
.B \-v
|
||||||
Prints version information to standard output, then exits.
|
Prints version information to standard output, then exits.
|
||||||
.TP
|
.TP
|
||||||
|
|
98
surf.c
98
surf.c
|
@ -20,6 +20,10 @@
|
||||||
#include <JavaScriptCore/JavaScript.h>
|
#include <JavaScriptCore/JavaScript.h>
|
||||||
#include <sys/file.h>
|
#include <sys/file.h>
|
||||||
|
|
||||||
|
#include "arg.h"
|
||||||
|
|
||||||
|
char *argv0;
|
||||||
|
|
||||||
#define LENGTH(x) (sizeof x / sizeof x[0])
|
#define LENGTH(x) (sizeof x / sizeof x[0])
|
||||||
#define COOKIEJAR_TYPE (cookiejar_get_type ())
|
#define COOKIEJAR_TYPE (cookiejar_get_type ())
|
||||||
#define COOKIEJAR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), COOKIEJAR_TYPE, CookieJar))
|
#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 GdkNativeWindow embed = 0;
|
||||||
static gboolean showxid = FALSE;
|
static gboolean showxid = FALSE;
|
||||||
static char winid[64];
|
static char winid[64];
|
||||||
static char *progname;
|
|
||||||
static gboolean loadimage = 1, plugin = 1, script = 1, using_proxy = 0;
|
static gboolean loadimage = 1, plugin = 1, script = 1, using_proxy = 0;
|
||||||
|
|
||||||
static char *buildpath(const char *path);
|
static char *buildpath(const char *path);
|
||||||
|
@ -138,10 +141,19 @@ buildpath(const char *path) {
|
||||||
FILE *f;
|
FILE *f;
|
||||||
|
|
||||||
/* creating directory */
|
/* creating directory */
|
||||||
if(path[0] == '/')
|
if(path[0] == '/') {
|
||||||
apath = g_strdup(path);
|
apath = g_strdup(path);
|
||||||
else
|
} else if(path[0] == '~') {
|
||||||
apath = g_strconcat(g_get_home_dir(), "/", path, NULL);
|
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, '/'))) {
|
if((p = strrchr(apath, '/'))) {
|
||||||
*p = '\0';
|
*p = '\0';
|
||||||
g_mkdir_with_parents(apath, 0700);
|
g_mkdir_with_parents(apath, 0700);
|
||||||
|
@ -153,6 +165,7 @@ buildpath(const char *path) {
|
||||||
g_chmod(apath, 0600); /* always */
|
g_chmod(apath, 0600); /* always */
|
||||||
fclose(f);
|
fclose(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
return apath;
|
return apath;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -216,7 +229,7 @@ cookiejar_new(const char *filename, gboolean read_only) {
|
||||||
return g_object_new(COOKIEJAR_TYPE,
|
return g_object_new(COOKIEJAR_TYPE,
|
||||||
SOUP_COOKIE_JAR_TEXT_FILENAME, filename,
|
SOUP_COOKIE_JAR_TEXT_FILENAME, filename,
|
||||||
SOUP_COOKIE_JAR_READ_ONLY, read_only, NULL);
|
SOUP_COOKIE_JAR_READ_ONLY, read_only, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
cookiejar_set_property(GObject *self, guint prop_id, const GValue *value, GParamSpec *pspec) {
|
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 };
|
const Arg a = { .v = (void *)cmd };
|
||||||
char tmp[64];
|
char tmp[64];
|
||||||
|
|
||||||
cmd[i++] = progname;
|
cmd[i++] = argv0;
|
||||||
if(embed && !noembed) {
|
if(embed && !noembed) {
|
||||||
cmd[i++] = "-e";
|
cmd[i++] = "-e";
|
||||||
snprintf(tmp, LENGTH(tmp), "%u\n", (int)embed);
|
snprintf(tmp, LENGTH(tmp), "%u\n", (int)embed);
|
||||||
|
@ -905,7 +918,8 @@ updatewinid(Client *c) {
|
||||||
void
|
void
|
||||||
usage(void) {
|
usage(void) {
|
||||||
fputs("surf - simple browser\n", stderr);
|
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
|
void
|
||||||
|
@ -928,49 +942,49 @@ zoom(Client *c, const Arg *arg) {
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int argc, char *argv[]) {
|
main(int argc, char *argv[]) {
|
||||||
int i;
|
|
||||||
Arg arg;
|
Arg arg;
|
||||||
|
|
||||||
progname = argv[0];
|
|
||||||
/* command line args */
|
/* command line args */
|
||||||
for(i = 1, arg.v = NULL; i < argc && argv[i][0] == '-' &&
|
ARGBEGIN {
|
||||||
argv[i][1] != '\0' && argv[i][2] == '\0'; i++) {
|
case 'c':
|
||||||
if(!strcmp(argv[i], "--")) {
|
cookiefile = EARGF(usage());
|
||||||
i++;
|
break;
|
||||||
break;
|
case 'e':
|
||||||
}
|
embed = strtol(EARGF(usage()), NULL, 0);
|
||||||
switch(argv[i][1]) {
|
break;
|
||||||
case 'e':
|
case 'i':
|
||||||
if(++i < argc)
|
loadimage = 0;
|
||||||
embed = strtol(argv[i], NULL, 0);
|
break;
|
||||||
else
|
case 'p':
|
||||||
usage();
|
plugin = 0;
|
||||||
break;
|
break;
|
||||||
case 'i':
|
case 'r':
|
||||||
loadimage = 0;
|
scriptfile = EARGF(usage());
|
||||||
break;
|
break;
|
||||||
case 'p':
|
case 's':
|
||||||
plugin = 0;
|
script = 0;
|
||||||
break;
|
break;
|
||||||
case 's':
|
case 't':
|
||||||
script = 0;
|
stylefile = EARGF(usage());
|
||||||
break;
|
break;
|
||||||
case 'x':
|
case 'x':
|
||||||
showxid = TRUE;
|
showxid = TRUE;
|
||||||
break;
|
break;
|
||||||
case 'v':
|
case 'v':
|
||||||
die("surf-"VERSION", ©2009-2012 surf engineers, see LICENSE for details\n");
|
die("surf-"VERSION", ©2009-2012 surf engineers, see LICENSE for details\n");
|
||||||
default:
|
default:
|
||||||
usage();
|
usage();
|
||||||
}
|
} ARGEND;
|
||||||
}
|
if(argc > 0)
|
||||||
if(i < argc)
|
arg.v = argv[0];
|
||||||
arg.v = argv[i];
|
|
||||||
setup();
|
setup();
|
||||||
newclient();
|
newclient();
|
||||||
if(arg.v)
|
if(arg.v)
|
||||||
loaduri(clients, &arg);
|
loaduri(clients, &arg);
|
||||||
gtk_main();
|
gtk_main();
|
||||||
cleanup();
|
cleanup();
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue