applied history master
authorDaniel Liu <mr.picklepinosaur@gmail.com>
Mon, 15 Feb 2021 00:19:31 +0000 (19:19 -0500)
committerDaniel Liu <mr.picklepinosaur@gmail.com>
Mon, 15 Feb 2021 00:19:31 +0000 (19:19 -0500)
config.def.h
surf.c

index 441ac52..e8e1c50 100644 (file)
@@ -6,6 +6,7 @@ static char *styledir       = "~/.surf/styles/";
 static char *certdir        = "~/.surf/certificates/";
 static char *cachedir       = "~/.surf/cache/";
 static char *cookiefile     = "~/.surf/cookies.txt";
+static char *historyfile    = "~/.surf/history.txt";
 
 static SearchEngine searchengines[] = {
     { "g",    "https://www.google.com/search?q=%s"             },
@@ -121,6 +122,11 @@ static WebKitFindOptions findopts = WEBKIT_FIND_OPTIONS_CASE_INSENSITIVE |
         } \
 }
 
+#define SETURI(p)       { .v = (char *[]){ "/bin/sh", "-c", \
+"prop=\"`surf_history_dmenu.sh`\" &&" \
+"xprop -id $1 -f $0 8s -set $0 \"$prop\"", \
+p, winid, NULL } }
+
 /* styles */
 /*
  * The iteration will stop at the first match, beginning at the beginning of
@@ -202,6 +208,7 @@ static Key keys[] = {
        { MODKEY|GDK_SHIFT_MASK, GDK_KEY_b,      toggle,     { .i = ScrollBars } },
        { MODKEY|GDK_SHIFT_MASK, GDK_KEY_t,      toggle,     { .i = StrictTLS } },
        { MODKEY|GDK_SHIFT_MASK, GDK_KEY_m,      toggle,     { .i = Style } },
+    { MODKEY               , GDK_KEY_Return, spawn,      SETURI("_SURF_GO") },
 };
 
 /* button definitions */
diff --git a/surf.c b/surf.c
index 4520daa..a4465d4 100644 (file)
--- a/surf.c
+++ b/surf.c
@@ -181,6 +181,7 @@ static void spawn(Client *c, const Arg *a);
 static void msgext(Client *c, char type, const Arg *a);
 static void destroyclient(Client *c);
 static void cleanup(void);
+static void updatehistory(const char *u, const char *t);
 
 /* GTK/WebKit */
 static WebKitWebView *newview(Client *c, WebKitWebView *rv);
@@ -344,10 +345,11 @@ setup(void)
        curconfig = defconfig;
 
        /* dirs and files */
-       cookiefile = buildfile(cookiefile);
-       scriptfile = buildfile(scriptfile);
-       cachedir   = buildpath(cachedir);
-       certdir    = buildpath(certdir);
+       cookiefile  = buildfile(cookiefile);
+       historyfile = buildfile(historyfile);
+       scriptfile  = buildfile(scriptfile);
+       cachedir    = buildpath(cachedir);
+       certdir     = buildpath(certdir);
 
        gdkkb = gdk_seat_get_keyboard(gdk_display_get_default_seat(gdpy));
 
@@ -1084,12 +1086,28 @@ cleanup(void)
        close(pipein[0]);
        close(pipeout[1]);
        g_free(cookiefile);
+       g_free(historyfile);
        g_free(scriptfile);
        g_free(stylefile);
        g_free(cachedir);
        XCloseDisplay(dpy);
 }
 
+void
+updatehistory(const char *u, const char *t)
+{
+       FILE *f;
+       f = fopen(historyfile, "a+");
+
+       char b[20];
+       time_t now = time (0);
+       strftime (b, 20, "%Y-%m-%d %H:%M:%S", localtime (&now));
+       fputs(b, f);
+
+       fprintf(f, " %s %s\n", u, t);
+       fclose(f);
+}
+
 WebKitWebView *
 newview(Client *c, WebKitWebView *rv)
 {
@@ -1499,6 +1517,7 @@ loadfailedtls(WebKitWebView *v, gchar *uri, GTlsCertificate *cert,
        return TRUE;
 }
 
+
 void
 loadchanged(WebKitWebView *v, WebKitLoadEvent e, Client *c)
 {
@@ -1527,6 +1546,7 @@ loadchanged(WebKitWebView *v, WebKitLoadEvent e, Client *c)
                break;
        case WEBKIT_LOAD_FINISHED:
                seturiparameters(c, uri, loadfinished);
+               updatehistory(uri, c->title);
                /* Disabled until we write some WebKitWebExtension for
                 * manipulating the DOM directly.
                evalscript(c, "document.documentElement.style.overflow = '%s'",