Merged config support from Dieter. Added a couple of new functions. Merged support...
authorBarrucadu <mike@barrucadu.co.uk>
Fri, 24 Apr 2009 23:13:30 +0000 (00:13 +0100)
committerBarrucadu <mike@barrucadu.co.uk>
Fri, 24 Apr 2009 23:13:30 +0000 (00:13 +0100)
README
config [new file with mode: 0644]
uzbl.c

diff --git a/README b/README
index a771e03..1f91cd0 100644 (file)
--- a/README
+++ b/README
@@ -15,3 +15,11 @@ Bugs:
 Notes:
   - I push the code most times I save any changes, regardless of whether it actually compiles or not. Thus, the code here should be regarded as highly experimental.
   - If you use any of my code in another fork of uzbl (or anything really) it'd be nice to get a mention.
+
+Todo:
+  - Change commands to a few characters long.
+  - Command/insert modes (ESC to switch, methinks).
+  - Automatically run a command when typed (no need to press enter).
+  - Support for arguments to commands (argc/argv-like structure?).
+  - Support for binding keyboard shortcuts in config file.
+  - Support for setting home page in config file.
\ No newline at end of file
diff --git a/config b/config
new file mode 100644 (file)
index 0000000..e5766cb
--- /dev/null
+++ b/config
@@ -0,0 +1,8 @@
+# example uzbl config. in a real config, we should obey the xdg spec
+[keyboard]
+next=somekey
+[behavior]
+history_file = /tmp/uzbl.history
+[network]
diff --git a/uzbl.c b/uzbl.c
index f5c8082..cd12301 100644 (file)
--- a/uzbl.c
+++ b/uzbl.c
 static GtkWidget*     main_window;
 static WebKitWebView* web_view;
 
-static gchar* uri     = NULL;
-static gchar* fifodir = NULL;
-static gint mechmode  = 0;
-static char fifopath[64];
+static gchar* history_file;
+static gchar* home_page;
+static gchar* uri       = NULL;
+static gchar* fifodir   = NULL;
+static gint   mechmode  = 0;
+static char   fifopath[64];
 
 static GOptionEntry entries[] =
 {
@@ -63,6 +65,28 @@ struct command
 static struct command commands[256];
 static int            numcmds = 0;
 
+static void log_history_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data) {
+  strncpy (uri, webkit_web_frame_get_uri (frame), strlen (webkit_web_frame_get_uri (frame)));
+
+  FILE * output_file = fopen (history_file, "a");
+  if (output_file == NULL)
+    {
+      fprintf (stderr, "Cannot open %s for logging\n", history_file);
+    }
+  else
+    {
+      time_t rawtime;
+      struct tm * timeinfo;
+      char buffer [80];
+      time (&rawtime);
+      timeinfo = localtime (&rawtime);
+      strftime (buffer,80,"%Y-%m-%d %H:%M:%S",timeinfo);
+      
+      fprintf (output_file, "%s %s\n",buffer, uri);
+      fclose (output_file);
+    }
+}
+
 static GtkWidget* create_browser ()
 {
   GtkWidget* scrolled_window = gtk_scrolled_window_new (NULL, NULL);
@@ -71,6 +95,8 @@ static GtkWidget* create_browser ()
   web_view = WEBKIT_WEB_VIEW (webkit_web_view_new ());
   gtk_container_add (GTK_CONTAINER (scrolled_window), GTK_WIDGET (web_view));
 
+  g_signal_connect (G_OBJECT (web_view), "load-committed", G_CALLBACK (log_history_cb), web_view);
+
   return scrolled_window;
 }
 
@@ -160,7 +186,7 @@ static void add_command (char* cmdstr, void* function)
   numcmds++;
 }
 
-static bool setup_gtk(int argc, char* argv[])
+static bool setup_gtk (int argc, char* argv[])
 {
   gtk_init (&argc, &argv);
 
@@ -176,11 +202,10 @@ static bool setup_gtk(int argc, char* argv[])
   g_option_context_add_group (context, gtk_get_option_group (TRUE));
   g_option_context_parse (context, &argc, &argv, &error);
 
-  if (uri) {
-    webkit_web_view_load_uri (web_view, uri);
-  } else {
-    webkit_web_view_load_uri (web_view, "http://www.google.com");
-  }
+  if (uri)
+    {
+      webkit_web_view_load_uri (web_view, uri);
+    }
 
   gtk_widget_grab_focus (GTK_WIDGET (web_view));
   gtk_widget_show_all (main_window);
@@ -188,7 +213,7 @@ static bool setup_gtk(int argc, char* argv[])
   return true;
 }
 
-static void setup_commands()
+static void setup_commands ()
 {
   //This func. is nice but currently it cannot be used for functions that require arguments or return data. --sentientswitch
 
@@ -208,12 +233,45 @@ static void setup_commands()
   //add_command("get uri", &webkit_web_view_get_uri);
 }
 
-static bool setup_threading()
+static void setup_threading ()
 {
   pthread_t control_thread;
   pthread_create(&control_thread, NULL, control_fifo, NULL);
+}
 
-  return true;
+static void setup_settings ()
+{
+  GKeyFile* config = g_key_file_new ();
+  gboolean  res    = g_key_file_load_from_file (config, "./config", G_KEY_FILE_NONE, NULL); //TODO: pass config file as argument
+
+  if (res)
+    {
+      printf ("Config loaded\n");
+    }
+  else
+    {
+      fprintf (stderr, "config loading failed\n"); //TODO: exit codes with gtk? 
+    }
+
+  history_file = g_key_file_get_value (config, "behavior", "history_file", NULL);
+  if (history_file)
+    {
+      printf ("Setting history file to: %s\n", history_file);
+    }
+  else
+    {
+      printf ("History logging disabled\n");
+    }
+
+  home_page = g_key_file_get_value (config, "behavior", "home_page", NULL);
+  if (home_page)
+    {
+      printf ("Setting home page to: %s\n", home_page);
+    }
+  else
+    {
+      printf ("Home page disabled\n");
+    }
 }
 
 int main (int argc, char* argv[])
@@ -221,6 +279,7 @@ int main (int argc, char* argv[])
   if (!g_thread_supported ())
     g_thread_init (NULL);
 
+  setup_settings ();
   setup_gtk (argc, argv);
   setup_commands ();
   setup_threading ();