You are not logged in.
UPDATE:
This thread is out of date (well, at least the beginning) and no longer the most optimal means to reach the community.
If you have useful things to contribute, our irc/mailing list/wiki is probably a better choice.
See: http://www.uzbl.org/
Inspired by http://bbs.archlinux.org/viewtopic.php?id=67463
ideas on how i sort of want it:
- 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 <foo>' 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 <id> -url <http://>.
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.to figure out:
- password management. maybe an encrypted store that unlocks with an ssh key?
- how to handle hyperlinks? number them like konqueror does?NOTE:
- My c skills are very rusty, it will take me a while to get back up to speed
current state? very close to zero.
you can all uzbl --uri http://<someurl> and it will open a window with the rendered page. That's it.
howto @ http://github.com/Dieterbe/uzbl/blob/e3 … 580e/HOWTO
Last edited by Dieter@be (2009-06-19 07:17:30)
< Daenyth> and he works prolifically
4 8 15 16 23 42
Offline
First, also, I like the idea so far.. really hope to see this become into something.
Offline
I applaud you for trying to think out of the box!
I disagree though on the tabbing issue. I think that it would be silly to have single windows for each page. i have a reason for that. when i have my browser open for reference work or something, i usually move it around, out of the way or something and it would annoy me to no end if i had to move all the windows around one by one (and yes, i am sure there would be some clever thing to make a certain window manager do that for me, but I don't think that is the task of a window manager. (although the name "window manager" would technically suggest it, i still don't think so)
good luck nontheless!
cheers
Barde
Offline
At the moment, what it really needs is a way to open a link in a new window (middle-click?)
This weekend I'll definitely do some reading up on C / WebKit and see if I can contribute to this.
Last edited by Barrucadu (2009-04-22 20:54:05)
Offline
Maybe you can do tabbing in the control window. Like store a cache of all pages for quick switching. i.e. ./uzbl --cache ~/.uzbl/cache/tab1, not sure how webkit works with that, and it would definitely have to be stored in RAM not disk...
By the way does webkit have multiple rendering methods? Is it possible to tweak things to be more compact?
Offline
The tabbing part could actually be put into a separate application, this would make it more general and usable for other applications too (terminals comes to my mind). Anyway, I think this is an interesting approach for a web browser.
Offline
one note on the whole tabbing discussion:
the 'philosophy' behind ditching the tabs? unix = one tool, one job; leave stuff like that to the WM, that's what it's there for. many WMs will tab any and all apps (PekWM and Fluxbox i believe). and this is actually an awesome and underused feature IMO. you pick a window, drag it 'onto' another window, and now you've got a tabbed titlebar of Terminal, Firefox, and Pidgin (or whatever) you can use the mouse wheel or keystrokes to move through the layers / tabs. from there, it's not a far mental leap to dumping a few uzbl windows onto each other and getting --all-- the existing tab functionality entirely from the WM.
... i would miss firefox's S-C-t though, that one's a life saver.
//github/
Offline
@brisbin33: But what about 50+ tabs?
Offline
Just to clarify one thing, I was thinking on tab support as a separate application for those window managers that doesn't have built-in support for tabbing, for example openbox, icewm, metacity.
To be far, I don't think tabs are that important and I think it might be better to keep it as simple as possible in the beginning and extend it with feature later on.
Offline
This is a gui based browser right? or is thisa CLI based one?
As for GUI browsers, some things that I always use :
1) Tabs
2) ability to retain session, so that you don't have to enter the password at a site everytime you visit it. This is one of the reasons, I use links etc sparingly.
3) speed dial -- although I guess this is better of being a separate add on.
There's no such thing as a stupid question, but there sure are a lot of inquisitive idiots !
Offline
@brisbin33: But what about 50+ tabs?
a) hadn't occurred to me; i don't use tabs like that, but i am aware people do
b) is the WM model not scalable like that?
//github/
Offline
Screenshots?
Archi686 User | Old Screenshots | Old .Configs
Vi veri universum vivus vici.
Offline
Picture a browser that has nothing but the content and a statusbar. That's the screenshot.
archlinux - please read this and this — twice — then ask questions.
--
http://rsontech.net | http://github.com/rson
Offline
This is so awesome.
Archi686 User | Old Screenshots | Old .Configs
Vi veri universum vivus vici.
Offline
I love it, please stick to your original view, one instance, one page, one window. Plus uzblctrl.
Tabs could be implemented maybe with a seperate app + xembed, although I have no idea how that works, or if xembed is even capable of that, but you get my point.
Or of course as you mentioned window manager tabs too (Edit, I'll also point out that Xmonad has a nice tabbing layout that would be sweet for this)
I'll say it again, I love it
Yet another edit, after reading the other post: Vi keybindings for movement would be great. o + url like vimperator would be great too but that might be going a bit far, probably other ways of achieving that.
Last edited by HashBox (2009-04-22 23:41:00)
Offline
- 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.
the 'philosophy' behind ditching the tabs? unix = one tool, one job; leave stuff like that to the WM, that's what it's there for.
So I suppose all of the anti-tab believers would also prefer running 6 GNU Screen sessions instead of splitting 1 session into 6 windows?
I don't know if there's a better example of convoluting a principle like "one tool, one job." Tabs can provide basic HCI usability. Just because tabs can sometimes be implemented poorly does not mean that tabs should never be implemented at all. Having a window manager deal with a bunch of browser windows is just a bit silly..
Offline
Dieter@be wrote:- 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.brisbin33 wrote:the 'philosophy' behind ditching the tabs? unix = one tool, one job; leave stuff like that to the WM, that's what it's there for.
So I suppose all of the anti-tab believers would also prefer running 6 GNU Screen sessions instead of splitting 1 session into 6 windows?
, indeed. GNU Screen's entire purpose is to make multiple programs (perhaps a text-mode browser) easy to manage. It makes perfect sense to let the WM do its job.
Offline
- 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)
How's that going to work when using a proxy, since the proxy will do all the DNS resolution?
Are you familiar with our Forum Rules, and How To Ask Questions The Smart Way?
BlueHackers // fscanary // resticctl
Offline
On the hyperlinks selection matter, what possibilities does webkit offer? IIRC the hints system in vimperator and conkeror is a xulrunner feature, does webkit provide something we could use instead?
What does not kill you will hurt a lot.
Offline
This looks very interesting. It will be perfect with XMonad + XMonad.Layout.Tabbing. Following the progress of this one closely.
Last edited by Ashren (2009-04-23 06:19:13)
Offline
Well, the *boxes could handle the tabbing...
Last edited by Wintervenom (2009-04-23 06:22:38)
Offline
Wow this is awesome. I'll try to help anyway I can. But as said before..tabs are a must (I use tiling managers...can't have 20 windows running about )
Flash works seeing how it uses webkit..so for me personally tabs are the only thing stoping me from using this fulltime.
Lemme know if you need any graphics for it, I may find some free time to provide that. But using global gtk themes would be more advised
PS: Is the name final? This might turn into a really well known project..naming should be a great concern
I vote: Bare (Browser) , with a bear like logo (get the word play there I trust)
Add an address text entry there..shouldn't be too hard, I might find some time to do some deving on it this weekend too
PS2: First thing to take care of: --uri loads nada if you don't provide the http:// (eg "--uri www.google.com" fails)
Last edited by Wra!th (2009-04-23 08:16:37)
MacGregor DESPITE THEM!
7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Offline
I vote: Bare (Browser) , with a bear like logo (get the word play there I trust)
Bare does sound like a good name, uzbl is short enough, but in my opinion hard to remember.
Add an address text entry there..shouldn't be too hard, I might find some time to do some deving on it this weekend too
I would disagree about adding this to the interface, for me even the statusbar might be too much bloat for a browser that is supposed to minimalist. But if an address entry is required it can probably sit in the same place as the statusbar. Or it could be implemented in a popup window. I dunno, just throwing ideas out there.
My idea of this app would be having the core renderer as one executable, and that being as minimalist as possible, and then having the uzblctrl app able to control the running instances, maybe through id numbers (or window id's as I think was already in the todo). This would be sufficient to be scripted via external means.
Another small project, or maybe as part of this one, could be to create a sort of wrapper, that would implement the tabbing functionality, and maybe an address bar and more traditional browser UI. Sounds like a minimalist Chrome of sorts
Offline
I started working on the tab feature. I am at work so can't really get much done now, but this would qualify as a start.
Things are shamefully hardcoded but this is the jist of it. Obviouslly create_browser() and create_statusbar() need to be rewritten to create individual widgets (webkit widgets too), otherwise tabs will be useless. Yay finally a project to work on
// Original code taken from the example webkit-gtk+ application. see notice below.
/*
* Copyright (C) 2006, 2007 Apple Inc.
* Copyright (C) 2007 Alp Toker <alp@atoker.com>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <gtk/gtk.h>
#include <gtk/gtknotebook.h>
#include <webkit/webkit.h>
static GtkWidget* main_window;
static GtkWidget* uri_entry;
static GtkStatusbar* main_statusbar;
static WebKitWebView* web_view;
static gchar* main_title;
static gint load_progress;
static guint status_context_id;
static GtkWidget* tabs;
static gchar* uri = NULL;
static gboolean verbose = FALSE;
static GOptionEntry entries[] =
{
{ "uri", 'u', 0, G_OPTION_ARG_STRING, &uri, "Uri to load", NULL },
{ "verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose, "Be verbose", NULL },
{ NULL }
};
static void
activate_uri_entry_cb (GtkWidget* entry, gpointer data)
{
const gchar* uri = gtk_entry_get_text (GTK_ENTRY (entry));
g_assert (uri);
webkit_web_view_load_uri (web_view, uri);
}
static void update_title (GtkWindow* window)
{
GString* string = g_string_new (main_title);
g_string_append (string, " - Uzbl browser");
if (load_progress < 100)
g_string_append_printf (string, " (%d%%)", load_progress);
gchar* title = g_string_free (string, FALSE);
gtk_window_set_title (window, title);
g_free (title);
}
static void
link_hover_cb (WebKitWebView* page, const gchar* title, const gchar* link, gpointer data)
{
/* underflow is allowed */
gtk_statusbar_pop (main_statusbar, status_context_id);
if (link)
gtk_statusbar_push (main_statusbar, status_context_id, link);
}
static void
title_change_cb (WebKitWebView* web_view, WebKitWebFrame* web_frame, const gchar* title, gpointer data)
{
if (main_title)
g_free (main_title);
main_title = g_strdup (title);
update_title (GTK_WINDOW (main_window));
}
static void
progress_change_cb (WebKitWebView* page, gint progress, gpointer data)
{
load_progress = progress;
update_title (GTK_WINDOW (main_window));
}
static void
load_commit_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data)
{
const gchar* uri = webkit_web_frame_get_uri(frame);
if (uri)
gtk_entry_set_text (GTK_ENTRY (uri_entry), uri);
}
static void
destroy_cb (GtkWidget* widget, gpointer data)
{
gtk_main_quit ();
}
static void
go_back_cb (GtkWidget* widget, gpointer data)
{
webkit_web_view_go_back (web_view);
}
static void
go_forward_cb (GtkWidget* widget, gpointer data)
{
webkit_web_view_go_forward (web_view);
}
static GtkWidget*
create_browser ()
{
GtkWidget* scrolled_window = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
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), "title-changed", G_CALLBACK (title_change_cb), web_view);
g_signal_connect (G_OBJECT (web_view), "load-progress-changed", G_CALLBACK (progress_change_cb), web_view);
g_signal_connect (G_OBJECT (web_view), "load-committed", G_CALLBACK (load_commit_cb), web_view);
g_signal_connect (G_OBJECT (web_view), "hovering-over-link", G_CALLBACK (link_hover_cb), web_view);
return scrolled_window;
}
static GtkWidget* create_statusbar ()
{
main_statusbar = GTK_STATUSBAR (gtk_statusbar_new ());
status_context_id = gtk_statusbar_get_context_id (main_statusbar, "Link Hover");
return (GtkWidget*)main_statusbar;
}
static GtkWidget* create_window ()
{
GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size (GTK_WINDOW (window), 800, 600);
gtk_widget_set_name (window, "Uzbl browser");
g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (destroy_cb), NULL);
return window;
}
int main (int argc, char* argv[])
{
gtk_init (&argc, &argv);
if (!g_thread_supported ())
g_thread_init (NULL);
tabs = gtk_notebook_new();
GtkWidget* vbox = gtk_vbox_new (FALSE, 0);
gtk_box_pack_start (GTK_BOX (vbox), create_browser(), TRUE, TRUE, 0);
gtk_box_pack_start (GTK_BOX (vbox), create_statusbar(), FALSE, FALSE, 0);
gtk_notebook_append_page (GTK_NOTEBOOK (tabs), vbox, gtk_label_new ("TAB 1"));
GtkWidget* vbox2 = gtk_vbox_new (FALSE, 0);
gtk_box_pack_start (GTK_BOX (vbox2), gtk_label_new("tab 2 content"), TRUE, TRUE, 0);
gtk_notebook_append_page (GTK_NOTEBOOK (tabs), vbox2, gtk_label_new ("TAB 2"));
main_window = create_window ();
gtk_container_add (GTK_CONTAINER (main_window), tabs);
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);
webkit_web_view_load_uri (web_view, uri);
gtk_widget_grab_focus (GTK_WIDGET (web_view));
gtk_widget_show_all (main_window);
gtk_main ();
return 0;
}
MacGregor DESPITE THEM!
7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Offline
I would disagree about adding this to the interface, for me even the statusbar might be too much bloat for a browser that is supposed to minimalist. But if an address entry is required it can probably sit in the same place as the statusbar. Or it could be implemented in a popup window.
It could be packed next to the status bar so it doesn't waste extra space. I'ma get at it
MacGregor DESPITE THEM!
7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Offline