diff -up surf-2.0/config.def.h surf-2.0-history/config.def.h
--- surf-2.0/config.def.h	2017-11-26 14:29:37.963786915 +0100
+++ surf-2.0-history/config.def.h	2017-11-26 19:48:31.300096237 +0100
@@ -6,6 +6,7 @@ static char *styledir       = "~/.surf/s
 static char *certdir        = "~/.surf/certificates/";
 static char *cachedir       = "~/.surf/cache/";
 static char *cookiefile     = "~/.surf/cookies.txt";
+static char *historyfile    = "~/.surf/history.txt";
 
 /* Webkit default features */
 /* Highest priority value will be used.
@@ -101,6 +102,11 @@ static WebKitFindOptions findopts = WEBK
         } \
 }
 
+#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
@@ -181,6 +187,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 */
Only in surf-2.0-history/: config.h
Only in surf-2.0: .git
Only in surf-2.0-history/: surf
diff -up surf-2.0/surf.c surf-2.0-history/surf.c
--- surf-2.0/surf.c	2017-11-26 14:29:37.963786915 +0100
+++ surf-2.0-history/surf.c	2017-11-26 14:20:36.757100476 +0100
@@ -171,6 +171,7 @@ static void newwindow(Client *c, const A
 static void spawn(Client *c, 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);
@@ -336,10 +337,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));
 
@@ -1042,12 +1044,28 @@ cleanup(void)
 	while (clients)
 		destroyclient(clients);
 	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)
 {
@@ -1417,6 +1435,7 @@ loadfailedtls(WebKitWebView *v, gchar *u
 	return TRUE;
 }
 
+
 void
 loadchanged(WebKitWebView *v, WebKitLoadEvent e, Client *c)
 {
@@ -1445,6 +1464,7 @@ loadchanged(WebKitWebView *v, WebKitLoad
 		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'",
Only in surf-2.0-history/: surf.o
