[hackers] [surf] Add options for scriptfile, cookiefile and stylefile. And changing the default || Christoph Lohmann

From: <hg_AT_suckless.org>
Date: Wed, 31 Oct 2012 21:15:45 +0100 (CET)

changeset: 257:a7bb2344a9cf
tag: tip
user: Christoph Lohmann <20h_AT_r-36.net>
date: Wed Oct 31 21:13:50 2012 +0100
files: arg.h surf.1 surf.c
description:
Add options for scriptfile, cookiefile and stylefile. And changing the default
behaviour of buildpath to be more like in open().


diff -r fa9098d48ad4 -r a7bb2344a9cf arg.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/arg.h Wed Oct 31 21:13:50 2012 +0100
_AT_@ -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 -r fa9098d48ad4 -r a7bb2344a9cf surf.1
--- a/surf.1 Wed Oct 31 20:46:38 2012 +0100
+++ b/surf.1 Wed Oct 31 21:13:50 2012 +0100
_AT_@ -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"
_AT_@ -17,6 +20,9 @@
 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
_AT_@ -26,9 +32,15 @@
 .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 -r fa9098d48ad4 -r a7bb2344a9cf surf.c
--- a/surf.c Wed Oct 31 20:46:38 2012 +0100
+++ b/surf.c Wed Oct 31 21:13:50 2012 +0100
_AT_@ -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))
_AT_@ -74,7 +78,6 @@
 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);
_AT_@ -138,10 +141,19 @@
         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);
_AT_@ -153,6 +165,7 @@
                 g_chmod(apath, 0600); /* always */
                 fclose(f);
         }
+
         return apath;
 }
 
_AT_@ -216,7 +229,7 @@
         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) {
_AT_@ -628,7 +641,7 @@
         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);
_AT_@ -905,7 +918,8 @@
 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
_AT_@ -928,49 +942,49 @@
 
 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;
 }
+
Received on Wed Oct 31 2012 - 21:15:45 CET

This archive was generated by hypermail 2.3.0 : Wed Oct 31 2012 - 21:24:12 CET