From 96235f31822cf83b344ded4fa87a0b09916087c2 Mon Sep 17 00:00:00 2001 From: Barrucadu Date: Thu, 23 Apr 2009 22:00:40 +0100 Subject: [PATCH] Began work on FIFO control interface --- README | 34 ++--------------------- TODO | 6 ----- uzbl | Bin 0 -> 23180 bytes uzbl.c | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------- 4 files changed, 85 insertions(+), 49 deletions(-) delete mode 100644 TODO create mode 100755 uzbl diff --git a/README b/README index e436da9..f2c144c 100644 --- a/README +++ b/README @@ -1,32 +1,2 @@ -- Uzbl. - In my opinion, any program can only be really useful if it complies to the unix philosophy. - Web browsers are frequent violators of this principle. Time to change that! - -Right now uzbl is in a very early state but here are some ideas I would like to (not) implement - -- each instance of uzbl renders 1 page (eg it's a small wrapper around webkit), no tabbing, tab previews, or speed dial things. we have window managers for that. -- simple ini config file ("profile") for keyboard, network,.. settings -- implement some basic keyboard shortcuts for going up, down, refresh etc -- listen to signals and do useful stuff when triggered. -- open up a socket file/fifo/.. so we can easily control each instance by writing things like 'uri ' to /tmp/uzbl-pid -- MAYBE (if needed): 1 control application called uzblctrl or something. use this to modify the behavior of a uzbl instance (change url, refresh). use xdotool to get the window with focus. eg uzblctrl -win -url . - use xbindkeys to bind keys to call uzblctrl. -- no bookmark management builtin. make your own solution. for pulling a bookmark a plaintxt-based program using dmenu would work great here. combine with uzbltcrl and xbindkeys. - uzblctrl should support an option to query the current page so you can script something to add to your bookmarks. use zenity or something to add tags. -- similar story for history. -- no ad blocking built in. use the power of /etc/hosts. though uzblctrl should support an option to list all images on a page, so you can easily pick the links to ads to add them to your /etc/hosts. (dmenu can again be great here to automate this) -- no download manager. allow user to pick wget/curl/a custom script/... -- no build in command interpreters like ubiquity. uzbl should be accessible and you should use a shell or similar. -- no "clear cookies/cache/..." menu items. rm ~/$XDG_{DATA,CACHE}_DIR/uzbl/{cache,cookies}/* - - -to figure out: -- password management. maybe an encrypted store that unlocks with an ssh key? -- how to handle hyperlinks? number them like konqueror does? - - - -For more thoughts & ideas see http://bbs.archlinux.org/viewtopic.php?id=67463 - -NOTE: -- My c skills are very rusty, it will take me a while to get back up to speed +Bugs: + - The control_thread function doesn't receive data all the time, and causes segfaults for some reason. \ No newline at end of file diff --git a/TODO b/TODO deleted file mode 100644 index 5b289e6..0000000 --- a/TODO +++ /dev/null @@ -1,6 +0,0 @@ -* implement all the ideas from README -* see if we can get rid of gtk. I need no widgets at all, only the webkit page display no scrollbar, no statusbar. -* figure out caching with webkit and in general how we can speed everything up -* where to put proxy config? webkit support? -* can we change the behavior of the rendering? eg to add numbers to all hyperlinks -* figure out how webkit intercepts key input diff --git a/uzbl b/uzbl new file mode 100755 index 0000000000000000000000000000000000000000..9bf70a9136681b5add0fc66461bae9fe89675585 GIT binary patch literal 23180 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 #include +#include +#include +#include +#include +#include +#include +#include +#include +#include + static GtkWidget* main_window; static GtkWidget* uri_entry; static GtkStatusbar* main_statusbar; @@ -37,8 +47,6 @@ static gchar* main_title; static gint load_progress; static guint status_context_id; - - static gchar* uri = NULL; static gboolean verbose = FALSE; @@ -50,8 +58,6 @@ static GOptionEntry entries[] = }; - - static void activate_uri_entry_cb (GtkWidget* entry, gpointer data) { @@ -157,9 +163,68 @@ static GtkWidget* create_window () return window; } + +static bool parse_command(char *command) +{ + bool output; + output = true; + + if(strcmp(command, "forward") == 0) + { + printf("Going forward\n"); + webkit_web_view_go_forward (web_view); + } + else if(strcmp(command, "back") == 0) + { + printf("Going back\n"); + webkit_web_view_go_back (web_view); + } + else if(strncmp("http://", command, 7) == 0) + { + printf("Loading URI \"%s\"\n", command); + uri = command; + webkit_web_view_load_uri (web_view, uri); + } + else + { + output = false; + } + + return output; +} + +static void control_fifo(void *threadid) +{ + char *cmd; + int num, fd; + char *fifoname = "/tmp/uzbl"; + + mknod(fifoname, S_IFIFO | 0666 , 0); /* Do some stuff to work with multiple instances later foo-$PID or something */ + printf("Opened control fifo in %s\n", fifoname); + + while (true) + { + fd = open(fifoname, O_RDONLY); + while (num > 0) + { + if ((num = read(fd, cmd, 300)) == -1) + perror("read"); + else + { + cmd[num] = '\0'; + if(! parse_command(cmd)) + printf("Unknown command \"%s\"", cmd); + } + } + num = 1; + } + printf("Oops, this code should never be run.\n"); +} + int main (int argc, char* argv[]) { gtk_init (&argc, &argv); + if (!g_thread_supported ()) g_thread_init (NULL); @@ -169,19 +234,26 @@ int main (int argc, char* argv[]) main_window = create_window (); gtk_container_add (GTK_CONTAINER (main_window), vbox); - GError *error = NULL; - - GOptionContext* context = g_option_context_new ("- some stuff here maybe someday"); - g_option_context_add_main_entries (context, entries, NULL); - g_option_context_add_group (context, gtk_get_option_group (TRUE)); - g_option_context_parse (context, &argc, &argv, &error); + GError *error = NULL; + + GOptionContext* context = g_option_context_new ("- some stuff here maybe someday"); + g_option_context_add_main_entries (context, entries, NULL); + g_option_context_add_group (context, gtk_get_option_group (TRUE)); + g_option_context_parse (context, &argc, &argv, &error); + char *uri = "http://www.google.com"; + if(argc == 2) + uri = argv[1]; webkit_web_view_load_uri (web_view, uri); gtk_widget_grab_focus (GTK_WIDGET (web_view)); gtk_widget_show_all (main_window); - gtk_main (); + pthread_t controlthread; + pthread_create(&controlthread, NULL, control_fifo, NULL); + gtk_main (); + + pthread_exit(NULL); return 0; } -- 1.7.9.5