tapplied patch from arg. thanks :) - surf - customized build of surf, the suckless webkit browser
 (HTM) git clone git://src.adamsgaard.dk/surf
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 25b9ae3ce442f03e7667eeb54efee83fa1368524
 (DIR) parent d2a44361231d7bc576cacf08e74ad8d6584de0e1
 (HTM) Author: Enno Boland (tox) <tox@s01.de>
       Date:   Thu, 17 Sep 2009 01:09:00 +0200
       
       applied patch from arg. thanks :)
       Diffstat:
         M config.def.h                        |      48 ++++++++++++++++----------------
         M surf.c                              |      74 +++++++++++++------------------
       
       2 files changed, 56 insertions(+), 66 deletions(-)
       ---
 (DIR) diff --git a/config.def.h b/config.def.h
       t@@ -4,29 +4,29 @@ static gchar *progress_trust = "#00FF00";
        #define MODKEY GDK_CONTROL_MASK
        static Key keys[] = {
            /* modifier                    keyval      function    arg             Focus */
       -    { MODKEY|GDK_SHIFT_MASK,GDK_r,      reload,     { .b = TRUE },  ALWAYS },
       -    { MODKEY,               GDK_r,      reload,     { .b = FALSE }, ALWAYS },
       -    { MODKEY,               GDK_g,      showurl,    { 0 },          ALWAYS },
       -    { MODKEY,               GDK_slash,  showsearch, { 0 },          ALWAYS },
       -    { 0,                    GDK_Escape, hidesearch, { 0 },          ALWAYS },
       -    { 0,                    GDK_Escape, hideurl,    { 0 },          ALWAYS },
       -    { MODKEY|GDK_SHIFT_MASK,GDK_p,      print,      { 0 },          ALWAYS },
       -    { MODKEY,               GDK_p,      clipboard,  { .b = TRUE },  BROWSER },
       -    { MODKEY,               GDK_y,      clipboard,  { .b = FALSE }, BROWSER },
       -    { MODKEY|GDK_SHIFT_MASK,GDK_j,      zoom,       { .i = -1 },    BROWSER },
       -    { MODKEY|GDK_SHIFT_MASK,GDK_k,      zoom,       { .i = +1 },    BROWSER },
       -    { MODKEY|GDK_SHIFT_MASK,GDK_i,      zoom,       { .i = 0  },    BROWSER },
       -    { MODKEY,               GDK_l,      navigate,   { .i = +1 },    BROWSER },
       -    { MODKEY,               GDK_h,      navigate,   { .i = -1 },    BROWSER },
       -    { MODKEY,               GDK_j,      scroll,     { .i = +1 },    BROWSER },
       -    { MODKEY,               GDK_k,      scroll,     { .i = -1 },    BROWSER },
       -    { 0,                    GDK_Escape, stop,       { 0 },          BROWSER },
       -    { MODKEY,               GDK_o,      source,     { 0 },          BROWSER },
       -    { MODKEY,               GDK_n,      searchtext, { .b = TRUE },  BROWSER|SEARCHBAR },
       -    { MODKEY|GDK_SHIFT_MASK,GDK_n,      searchtext, { .b = FALSE }, BROWSER|SEARCHBAR },
       -    { 0,                    GDK_Return, searchtext, { .b = TRUE },  SEARCHBAR },
       -    { GDK_SHIFT_MASK,       GDK_Return, searchtext, { .b = FALSE }, SEARCHBAR },
       -    { 0,                    GDK_Return, loaduri,    { .v = NULL },  URLBAR },
       -    { 0,                    GDK_Return, hideurl,    { 0 },          URLBAR },
       +    { MODKEY|GDK_SHIFT_MASK,GDK_r,      reload,     { .b = TRUE },  Any },
       +    { MODKEY,               GDK_r,      reload,     { .b = FALSE }, Any },
       +    { MODKEY,               GDK_g,      showurl,    { 0 },          Any },
       +    { MODKEY,               GDK_slash,  showsearch, { 0 },          Any },
       +    { 0,                    GDK_Escape, hidesearch, { 0 },          Any },
       +    { 0,                    GDK_Escape, hideurl,    { 0 },          Any },
       +    { MODKEY|GDK_SHIFT_MASK,GDK_p,      print,      { 0 },          Any },
       +    { MODKEY,               GDK_p,      clipboard,  { .b = TRUE },  Browser },
       +    { MODKEY,               GDK_y,      clipboard,  { .b = FALSE }, Browser },
       +    { MODKEY|GDK_SHIFT_MASK,GDK_j,      zoom,       { .i = -1 },    Browser },
       +    { MODKEY|GDK_SHIFT_MASK,GDK_k,      zoom,       { .i = +1 },    Browser },
       +    { MODKEY|GDK_SHIFT_MASK,GDK_i,      zoom,       { .i = 0  },    Browser },
       +    { MODKEY,               GDK_l,      navigate,   { .i = +1 },    Browser },
       +    { MODKEY,               GDK_h,      navigate,   { .i = -1 },    Browser },
       +    { MODKEY,               GDK_j,      scroll,     { .i = +1 },    Browser },
       +    { MODKEY,               GDK_k,      scroll,     { .i = -1 },    Browser },
       +    { 0,                    GDK_Escape, stop,       { 0 },          Browser },
       +    { MODKEY,               GDK_o,      source,     { 0 },          Browser },
       +    { MODKEY,               GDK_n,      searchtext, { .b = TRUE },  Browser|SearchBar },
       +    { MODKEY|GDK_SHIFT_MASK,GDK_n,      searchtext, { .b = FALSE }, Browser|SearchBar },
       +    { 0,                    GDK_Return, searchtext, { .b = TRUE },  SearchBar },
       +    { GDK_SHIFT_MASK,       GDK_Return, searchtext, { .b = FALSE }, SearchBar },
       +    { 0,                    GDK_Return, loaduri,    { .v = NULL },  UrlBar },
       +    { 0,                    GDK_Return, hideurl,    { 0 },          UrlBar },
        };
        
 (DIR) diff --git a/surf.c b/surf.c
       t@@ -10,7 +10,6 @@
        #include <gdk/gdkkeysyms.h>
        #include <string.h>
        #include <unistd.h>
       -#include <getopt.h>
        #include <stdlib.h>
        #include <stdio.h>
        #include <webkit/webkit.h>
       t@@ -25,7 +24,7 @@ union Arg {
                const gboolean b;
                const gint i;
                const void *v;
       -} ;
       +};
        
        typedef struct Client {
                GtkWidget *win, *scroll, *vbox, *urlbar, *searchbar, *indicator;
       t@@ -45,10 +44,10 @@ typedef struct Cookie {
        } Cookie;
        
        typedef enum {
       -    BROWSER = 0x0001,
       -    SEARCHBAR = 0x0010,
       -    URLBAR = 0x0100,
       -    ALWAYS = ~0,
       +        Browser = 0x0001,
       +        SearchBar = 0x0010,
       +        UrlBar = 0x0100,
       +        Any = ~0,
        } KeyFocus;
        
        typedef struct {
       t@@ -69,8 +68,6 @@ static GdkNativeWindow embed = 0;
        static gboolean showxid = FALSE;
        static gboolean ignore_once = FALSE;
        static gchar *workdir;
       -extern char *optarg;
       -extern gint optind;
        
        static void cleanup(void);
        static void clipboard(Client *c, const Arg *arg);
       t@@ -104,8 +101,7 @@ static void reload(Client *c, const Arg *arg);
        static void rereadcookies(void);
        static void setcookie(char *name, char *val, char *dom, char *path, long exp);
        static void setup(void);
       -static void titlechange(WebKitWebView* view, WebKitWebFrame* frame,
       -                const gchar* title, Client *c);
       +static void titlechange(WebKitWebView* view, WebKitWebFrame* frame, const gchar* title, Client *c);
        static void scroll(Client *c, const Arg *arg);
        static void searchtext(Client *c, const Arg *arg);
        static void source(Client *c, const Arg *arg);
       t@@ -277,11 +273,11 @@ keypress(GtkWidget* w, GdkEventKey *ev, Client *c) {
                if(ev->type != GDK_KEY_PRESS)
                        return FALSE;
                if(GTK_WIDGET_HAS_FOCUS(c->searchbar))
       -                focus = SEARCHBAR;
       +                focus = SearchBar;
                else if(GTK_WIDGET_HAS_FOCUS(c->urlbar))
       -                focus = URLBAR;
       +                focus = UrlBar;
                else
       -                focus = BROWSER;
       +                focus = Browser;
                for(i = 0; i < LENGTH(keys); i++) {
                        if(focus & keys[i].focus
                                        && gdk_keyval_to_lower(ev->keyval) == keys[i].keyval
       t@@ -585,6 +581,10 @@ setup(void) {
                SoupSession *s;
                FILE *tmp;
        
       +        gtk_init(NULL, NULL);
       +        if (!g_thread_supported())
       +                g_thread_init(NULL);
       +
                dpy = GDK_DISPLAY();
                session = webkit_get_default_session();
                urlprop = XInternAtom(dpy, "_SURF_URL", False);
       t@@ -719,45 +719,35 @@ zoom(Client *c, const Arg *arg) {
        }
        
        int main(int argc, char *argv[]) {
       -        Client *c;
       -        gint o, a;
       +        int i;
                Arg arg;
       +        Client *c;
        
       -        gtk_init(NULL, NULL);
       -        if (!g_thread_supported())
       -                g_thread_init(NULL);
       -        while((o = getopt(argc, argv, "vhxe:")) != -1)
       -                switch(o) {
       -                case 'x':
       +        /* command line args */
       +        for(i = 1, arg.v = NULL; i < argc; i++) {
       +                if(!strcmp(argv[i], "-x"))
                                showxid = TRUE;
       -                        break;
       -                case 'e':
       -                        if(!(a = atoi(optarg)))
       +                else if(!strcmp(argv[i], "-e")) {
       +                        if(++i < argc)
       +                                embed = atoi(argv[i]);
       +                        else
                                        usage();
       -                        embed = a;
       -                        break;
       -                case 'v':
       +                }
       +                else if(!strcmp(argv[i], "-v"))
                                die("surf-"VERSION", © 2009 surf engineers, see LICENSE for details\n");
       -                        break;
       -                default:
       +                else if(argv[i][0] == '-')
                                usage();
       -                }
       +                else
       +                        arg.v = argv[i];
       +        }
                setup();
       -        if(optind + 1 == argc) {
       -                c = newclient();
       -                arg.v = argv[optind];
       -                if(strchr("./", argv[optind][0]) || strcmp("-", argv[optind]) == 0)
       -                        loadfile(c, argv[optind]);
       +        c = newclient();
       +        if(arg.v) {
       +                if(strchr("./", ((char *)arg.v)[0]) || strcmp("-", (char *)arg.v) == 0)
       +                        loadfile(c, (char *)arg.v);
                        else
                                loaduri(c, &arg);
       -
                }
       -        else if(optind != argc)
       -                usage();
       -        if(!clients)
       -                newclient();
       -
       -
                gtk_main();
                cleanup();
                return EXIT_SUCCESS;