Hello,
I wrote some patch for bookmark handling, attached. Everything is driven
by the right-click menu. Sadly, I had no idea how to include some labels
for the urls. Also, I'm rather beggining with C, so I'm sorry for any
eye-stabbing stupidities you may encounter, and please report
them to me.

Hope You'll like it.
Regards,
Ted

-- 
===========================================================
()  ascii ribbon campaign - against html e-mail
/\  www.asciiribbon.org   - against proprietary attachments

diff -r 18dd74d2564d config.def.h
--- a/config.def.h      Sat Oct 17 13:19:21 2009 +0200
+++ b/config.def.h      Tue Oct 20 14:39:33 2009 +0200
@@ -5,6 +5,7 @@
 static char *stylefile      = ".surf/style.css";
 static char *scriptfile     = ".surf/script.js";
 static char *cookiefile     = ".surf/cookies.txt";
+static char *bmarksfile     = ".surf/bmarks.txt";
 static char *dldir          = ".surf/dl";
 static time_t sessiontime   = 3600;
 
@@ -41,6 +42,8 @@
     { "New Window",     newwindow, { .v = NULL } },
     { "Reload",         reload,    { .b = FALSE } },
     { "Stop",           stop,      { 0 } },
+    { "Bookmark it",   addbookmark, { 0 } },
+    { "Show bookmarks", showbmarks,{ 0 } },
     { "<===",           navigate,  { .i = -1 } },
     { "===>",           navigate,  { .i = +1 } },
 };
diff -r 18dd74d2564d surf.c
--- a/surf.c    Sat Oct 17 13:19:21 2009 +0200
+++ b/surf.c    Tue Oct 20 14:39:33 2009 +0200
@@ -71,6 +71,7 @@
 static char winid[64];
 static char *progname;
 
+static void addbookmark(Client *c, const Arg *arg);
 static const char *autouri(Client *c);
 static char *buildpath(const char *path);
 static void changecookie(SoupCookieJar *jar, SoupCookie *o, SoupCookie *n, 
gpointer p);
@@ -112,6 +113,7 @@
 static void scroll(Client *c, const Arg *arg);
 static void searchtext(Client *c, const Arg *arg);
 static void source(Client *c, const Arg *arg);
+static void showbmarks(Client *c, const Arg *arg);
 static void showsearch(Client *c, const Arg *arg);
 static void showuri(Client *c, const Arg *arg);
 static void stop(Client *c, const Arg *arg);
@@ -126,6 +128,16 @@
 /* configuration, allows nested code to access above variables */
 #include "config.h"
 
+void
+addbookmark(Client *c, const Arg *arg) {
+       char *bmark_uri;
+       FILE *f;
+       bmark_uri = geturi(c);
+       f = fopen(bmarksfile, "a+");
+       fprintf(f, "%s\n", geturi(c));
+       fclose(f);
+}
+
 const char *
 autouri(Client *c) {
        if(GTK_WIDGET_HAS_FOCUS(c->uribar))
@@ -172,6 +184,7 @@
 cleanup(void) {
        while(clients)
                destroyclient(clients);
+       g_free(bmarksfile);
        g_free(cookiefile);
        g_free(dldir);
        g_free(scriptfile);
@@ -686,6 +699,7 @@
        uriprop = XInternAtom(dpy, "_SURF_URI", False);
 
        /* create dirs and files */
+       bmarksfile = buildpath(bmarksfile);
        cookiefile = buildpath(cookiefile);
        dldir = buildpath(dldir);
        scriptfile = buildpath(scriptfile);
@@ -699,6 +713,23 @@
 }
 
 void
+showbmarks(Client *c, const Arg *arg) {
+       /* I wonder if 4 kB is too much or not enough */
+       char html[4096] = "";
+       /* same here. time will tell */
+       char uri[128];
+       FILE *f;
+       stop(c, NULL);
+       f = fopen(bmarksfile, "r");
+       while(fscanf(f, "%127s\n", uri) != EOF) {
+               snprintf(&html[strlen(html)], sizeof(html) - strlen(html),
+                       "<a href='%s'>%s</a><br />", uri, uri);
+       }
+       fclose(f);
+       webkit_web_view_load_html_string(c->view, html, "about:bookmarks");
+}
+
+void
 showsearch(Client *c, const Arg *arg) {
        hideuri(c, NULL);
        gtk_widget_show(c->searchbar);

Reply via email to