From afce27422a221c718958a06a1e7f804f0a59003d Mon Sep 17 00:00:00 2001 From: Sylvester Johansson Date: Thu, 28 May 2009 22:13:24 +0200 Subject: OH GOD I DON'T KNOW WHAT I AM DOING --- docs/INSTALL | 2 +- examples/configs/sampleconfig-dev | 5 +- examples/data/style.css | 4 + examples/scripts/linkfollow.js | 22 +++-- uzbl.c | 171 ++++++++++++++++++++++++-------------- uzbl.h | 14 ++++ 6 files changed, 144 insertions(+), 74 deletions(-) diff --git a/docs/INSTALL b/docs/INSTALL index 440157a..3453e03 100644 --- a/docs/INSTALL +++ b/docs/INSTALL @@ -29,7 +29,7 @@ Dependencies * pkgconfig (for Make/gcc) * libwebkit 1.1.4 or higher * libsoup 2.24 or higher (dep for webkit/gtk+) -* gtk 2 something something +* gtk 2.14 or higher Optional/Recommended -------------------- diff --git a/examples/configs/sampleconfig-dev b/examples/configs/sampleconfig-dev index 3deeac1..0dcc0d2 100644 --- a/examples/configs/sampleconfig-dev +++ b/examples/configs/sampleconfig-dev @@ -60,7 +60,7 @@ set shell_cmd = sh -c set show_status = 1 # you can optionally use this setting to override the background color of the statusbar from your GTK theme. set status_background = #303030 -set status_format = MODE [KEYCMD] LOAD_PROGRESSBAR URI NAME MSGSELECTED_URI +set status_format = [MODE] [KEYCMD] LOAD_PROGRESSBAR URI NAME MSGSELECTED_URI set status_top = 0 # define how your titlebar should look like. (short = statusbar is also shown, long = show everything you must see if statusbar is off) set title_format_short = TITLE - Uzbl browser @@ -69,7 +69,8 @@ set title_format_long = KEYCMD MODE TITLE - Uzbl browser > SELECTED_URI set status_pbar_done = * set status_pbar_pending = - set status_pbar_width = 12 - +set insert_indicator = I +set command_indicator = C set modkey = Mod1 # reset to command mode when new page is loaded set reset_command_mode = 1 diff --git a/examples/data/style.css b/examples/data/style.css index 9789e6f..de0a38b 100644 --- a/examples/data/style.css +++ b/examples/data/style.css @@ -1,6 +1,10 @@ .uzbl_highlight { background-color: yellow;} .uzbl_h_first { background-color: lightgreen;} +.uzbl_follow { border-style: dotted; + border-width: thin; +} + #uzbl_hint > div { display: inline; border: 2px solid #4a6600; diff --git a/examples/scripts/linkfollow.js b/examples/scripts/linkfollow.js index e77219c..aad7353 100644 --- a/examples/scripts/linkfollow.js +++ b/examples/scripts/linkfollow.js @@ -10,7 +10,7 @@ // bind f_ = js hints.follow("%s",hints.open) // // At the moment, it may be useful to have way of forcing uzbl to load the script -// bind :lf = script /usr/share/examples/scripts/linkfollow.js +// bind :lf = script /usr/share/uzbl/examples/scripts/linkfollow.js // // The default style for the hints are pretty ugly, so it is recommended to add the following // to config file @@ -25,11 +25,20 @@ function Hints(){ + // Settings + //////////////////////////////////////////////////////////////////////////// // if set to true, you must explicitly call hints.follow(), otherwise it will // follow the link if there is only one matching result var requireReturn = true; + // Case sensitivity flag + var matchCase = "i"; + + // For case sensitive matching, uncomment: + // var matchCase = ""; + + var uzblid = 'uzbl_hint'; var uzblclass = 'uzbl_highlight'; var uzblclassfirst = 'uzbl_h_first'; @@ -81,7 +90,7 @@ function Hints(){ function Matcher(str){ var numbers = str.replace(/[^\d]/g,""); - var words = str.replace(/\d/g,"").split(/\s+/).map(function (n) { return new RegExp(n,"i")}); + var words = str.replace(/\d/g,"").split(/\s+/).map(function (n) { return new RegExp(n,matchCase)}); this.test = test; this.toString = toString; this.numbers = numbers; @@ -195,10 +204,12 @@ function Hints(){ this.openNewWindow = function(item){ // TODO: this doesn't work yet + item.className += " uzbl_follow"; window.open(item.href,"uzblnew",""); } this.open = function(item){ simulateMouseOver(item); + item.className += " uzbl_follow"; window.location = item.href; } @@ -222,13 +233,6 @@ function Hints(){ var item = items[0].node; } if (item) { - // This causes some elements to move around. Guess it should only be applied to - // links - item.style.margin -= 3; - item.style.padding -= 3; - item.style.borderStyle = "dotted"; - item.style.borderWidth = "thin"; - var name = item.tagName; if (name == 'A') { if(item.click) {item.click()}; diff --git a/uzbl.c b/uzbl.c index 60c9eaa..ba6655a 100644 --- a/uzbl.c +++ b/uzbl.c @@ -81,72 +81,75 @@ GOptionEntry entries[] = typedef const struct { void **ptr; int type; + int dump; void (*func)(void); } uzbl_cmdprop; enum {TYPE_INT, TYPE_STR}; /* an abbreviation to help keep the table's width humane */ -#define PTR(var, t, fun) { .ptr = (void*)&(var), .type = TYPE_##t, .func = fun } +#define PTR(var, t, d, fun) { .ptr = (void*)&(var), .type = TYPE_##t, .dump = d, .func = fun } const struct { char *name; uzbl_cmdprop cp; } var_name_to_ptr[] = { -/* variable name pointer to variable in code type callback function */ +/* variable name pointer to variable in code type dump callback function */ /* --------------------------------------------------------------------------------------- */ - { "uri", PTR(uzbl.state.uri, STR, cmd_load_uri)}, - { "mode", PTR(uzbl.behave.mode, INT, NULL)}, - { "inject_html", PTR(uzbl.behave.inject_html, STR, cmd_inject_html)}, - { "base_url", PTR(uzbl.behave.base_url, STR, NULL)}, - { "html_endmarker", PTR(uzbl.behave.html_endmarker, STR, NULL)}, - { "html_mode_timeout", PTR(uzbl.behave.html_timeout, INT, NULL)}, - { "status_message", PTR(uzbl.gui.sbar.msg, STR, update_title)}, - { "show_status", PTR(uzbl.behave.show_status, INT, cmd_set_status)}, - { "status_top", PTR(uzbl.behave.status_top, INT, move_statusbar)}, - { "status_format", PTR(uzbl.behave.status_format, STR, update_title)}, - { "status_pbar_done", PTR(uzbl.gui.sbar.progress_s, STR, update_title)}, - { "status_pbar_pending", PTR(uzbl.gui.sbar.progress_u, STR, update_title)}, - { "status_pbar_width", PTR(uzbl.gui.sbar.progress_w, INT, update_title)}, - { "status_background", PTR(uzbl.behave.status_background, STR, update_title)}, - { "title_format_long", PTR(uzbl.behave.title_format_long, STR, update_title)}, - { "title_format_short", PTR(uzbl.behave.title_format_short, STR, update_title)}, - { "insert_mode", PTR(uzbl.behave.insert_mode, INT, NULL)}, - { "always_insert_mode", PTR(uzbl.behave.always_insert_mode, INT, cmd_always_insert_mode)}, - { "reset_command_mode", PTR(uzbl.behave.reset_command_mode, INT, NULL)}, - { "modkey", PTR(uzbl.behave.modkey, STR, cmd_modkey)}, - { "load_finish_handler", PTR(uzbl.behave.load_finish_handler, STR, NULL)}, - { "load_start_handler", PTR(uzbl.behave.load_start_handler, STR, NULL)}, - { "load_commit_handler", PTR(uzbl.behave.load_commit_handler, STR, NULL)}, - { "history_handler", PTR(uzbl.behave.history_handler, STR, NULL)}, - { "download_handler", PTR(uzbl.behave.download_handler, STR, NULL)}, - { "cookie_handler", PTR(uzbl.behave.cookie_handler, STR, cmd_cookie_handler)}, - { "fifo_dir", PTR(uzbl.behave.fifo_dir, STR, cmd_fifo_dir)}, - { "socket_dir", PTR(uzbl.behave.socket_dir, STR, cmd_socket_dir)}, - { "http_debug", PTR(uzbl.behave.http_debug, INT, cmd_http_debug)}, - { "shell_cmd", PTR(uzbl.behave.shell_cmd, STR, NULL)}, - { "proxy_url", PTR(uzbl.net.proxy_url, STR, set_proxy_url)}, - { "max_conns", PTR(uzbl.net.max_conns, INT, cmd_max_conns)}, - { "max_conns_host", PTR(uzbl.net.max_conns_host, INT, cmd_max_conns_host)}, - { "useragent", PTR(uzbl.net.useragent, STR, cmd_useragent)}, + { "uri", PTR(uzbl.state.uri, STR, 1, cmd_load_uri)}, + { "mode", PTR(uzbl.behave.mode, INT, 0, NULL)}, + { "inject_html", PTR(uzbl.behave.inject_html, STR, 0, cmd_inject_html)}, + { "base_url", PTR(uzbl.behave.base_url, STR, 1, NULL)}, + { "html_endmarker", PTR(uzbl.behave.html_endmarker, STR, 1, NULL)}, + { "html_mode_timeout", PTR(uzbl.behave.html_timeout, INT, 1, NULL)}, + { "status_message", PTR(uzbl.gui.sbar.msg, STR, 1, update_title)}, + { "show_status", PTR(uzbl.behave.show_status, INT, 1, cmd_set_status)}, + { "status_top", PTR(uzbl.behave.status_top, INT, 1, move_statusbar)}, + { "status_format", PTR(uzbl.behave.status_format, STR, 1, update_title)}, + { "status_pbar_done", PTR(uzbl.gui.sbar.progress_s, STR, 1, update_title)}, + { "status_pbar_pending", PTR(uzbl.gui.sbar.progress_u, STR, 1, update_title)}, + { "status_pbar_width", PTR(uzbl.gui.sbar.progress_w, INT, 1, update_title)}, + { "status_background", PTR(uzbl.behave.status_background, STR, 1, update_title)}, + { "insert_indicator", PTR(uzbl.behave.insert_indicator, STR, 1, update_title)}, + { "command_indicator", PTR(uzbl.behave.cmd_indicator, STR, 1, update_title)}, + { "title_format_long", PTR(uzbl.behave.title_format_long, STR, 1, update_title)}, + { "title_format_short", PTR(uzbl.behave.title_format_short, STR, 1, update_title)}, + { "insert_mode", PTR(uzbl.behave.insert_mode, INT, 1, NULL)}, + { "always_insert_mode", PTR(uzbl.behave.always_insert_mode, INT, 1, cmd_always_insert_mode)}, + { "reset_command_mode", PTR(uzbl.behave.reset_command_mode, INT, 1, NULL)}, + { "modkey", PTR(uzbl.behave.modkey, STR, 1, cmd_modkey)}, + { "load_finish_handler", PTR(uzbl.behave.load_finish_handler, STR, 1, NULL)}, + { "load_start_handler", PTR(uzbl.behave.load_start_handler, STR, 1, NULL)}, + { "load_commit_handler", PTR(uzbl.behave.load_commit_handler, STR, 1, NULL)}, + { "history_handler", PTR(uzbl.behave.history_handler, STR, 1, NULL)}, + { "download_handler", PTR(uzbl.behave.download_handler, STR, 1, NULL)}, + { "cookie_handler", PTR(uzbl.behave.cookie_handler, STR, 1, cmd_cookie_handler)}, + { "fifo_dir", PTR(uzbl.behave.fifo_dir, STR, 1, cmd_fifo_dir)}, + { "socket_dir", PTR(uzbl.behave.socket_dir, STR, 1, cmd_socket_dir)}, + { "http_debug", PTR(uzbl.behave.http_debug, INT, 1, cmd_http_debug)}, + { "shell_cmd", PTR(uzbl.behave.shell_cmd, STR, 1, NULL)}, + { "proxy_url", PTR(uzbl.net.proxy_url, STR, 1, set_proxy_url)}, + { "max_conns", PTR(uzbl.net.max_conns, INT, 1, cmd_max_conns)}, + { "max_conns_host", PTR(uzbl.net.max_conns_host, INT, 1, cmd_max_conns_host)}, + { "useragent", PTR(uzbl.net.useragent, STR, 1, cmd_useragent)}, /* exported WebKitWebSettings properties*/ - { "font_size", PTR(uzbl.behave.font_size, INT, cmd_font_size)}, - { "monospace_size", PTR(uzbl.behave.monospace_size, INT, cmd_font_size)}, - { "minimum_font_size", PTR(uzbl.behave.minimum_font_size, INT, cmd_minimum_font_size)}, - { "disable_plugins", PTR(uzbl.behave.disable_plugins, INT, cmd_disable_plugins)}, - { "disable_scripts", PTR(uzbl.behave.disable_scripts, INT, cmd_disable_scripts)}, - { "autoload_images", PTR(uzbl.behave.autoload_img, INT, cmd_autoload_img)}, - { "autoshrink_images", PTR(uzbl.behave.autoshrink_img, INT, cmd_autoshrink_img)}, - { "enable_spellcheck", PTR(uzbl.behave.enable_spellcheck, INT, cmd_enable_spellcheck)}, - { "enable_private", PTR(uzbl.behave.enable_private, INT, cmd_enable_private)}, - { "print_backgrounds", PTR(uzbl.behave.print_bg, INT, cmd_print_bg)}, - { "stylesheet_uri", PTR(uzbl.behave.style_uri, STR, cmd_style_uri)}, - { "resizable_text_areas",PTR(uzbl.behave.resizable_txt, INT, cmd_resizable_txt)}, - { "default_encoding", PTR(uzbl.behave.default_encoding, STR, cmd_default_encoding)}, - { "enforce_96_dpi", PTR(uzbl.behave.enforce_96dpi, INT, cmd_enforce_96dpi)}, - { "caret_browsing", PTR(uzbl.behave.caret_browsing, INT, cmd_caret_browsing)}, - - { NULL, {.ptr = NULL, .type = TYPE_INT, .func = NULL}} + { "font_size", PTR(uzbl.behave.font_size, INT, 1, cmd_font_size)}, + { "monospace_size", PTR(uzbl.behave.monospace_size, INT, 1, cmd_font_size)}, + { "minimum_font_size", PTR(uzbl.behave.minimum_font_size, INT, 1, cmd_minimum_font_size)}, + { "disable_plugins", PTR(uzbl.behave.disable_plugins, INT, 1, cmd_disable_plugins)}, + { "disable_scripts", PTR(uzbl.behave.disable_scripts, INT, 1, cmd_disable_scripts)}, + { "autoload_images", PTR(uzbl.behave.autoload_img, INT, 1, cmd_autoload_img)}, + { "autoshrink_images", PTR(uzbl.behave.autoshrink_img, INT, 1, cmd_autoshrink_img)}, + { "enable_spellcheck", PTR(uzbl.behave.enable_spellcheck, INT, 1, cmd_enable_spellcheck)}, + { "enable_private", PTR(uzbl.behave.enable_private, INT, 1, cmd_enable_private)}, + { "print_backgrounds", PTR(uzbl.behave.print_bg, INT, 1, cmd_print_bg)}, + { "stylesheet_uri", PTR(uzbl.behave.style_uri, STR, 1, cmd_style_uri)}, + { "resizable_text_areas",PTR(uzbl.behave.resizable_txt, INT, 1, cmd_resizable_txt)}, + { "default_encoding", PTR(uzbl.behave.default_encoding, STR, 1, cmd_default_encoding)}, + { "enforce_96_dpi", PTR(uzbl.behave.enforce_96dpi, INT, 1, cmd_enforce_96dpi)}, + { "caret_browsing", PTR(uzbl.behave.caret_browsing, INT, 1, cmd_caret_browsing)}, + + { NULL, {.ptr = NULL, .type = TYPE_INT, .dump = 0, .func = NULL}} }, *n2v_p = var_name_to_ptr; const struct { @@ -386,23 +389,27 @@ scroll (GtkAdjustment* bar, GArray *argv) { gtk_adjustment_set_value (bar, gtk_adjustment_get_value(bar)+amount); } -static void scroll_begin(WebKitWebView* page, GArray *argv) { +static void +scroll_begin(WebKitWebView* page, GArray *argv) { (void) page; (void) argv; gtk_adjustment_set_value (uzbl.gui.bar_v, gtk_adjustment_get_lower(uzbl.gui.bar_v)); } -static void scroll_end(WebKitWebView* page, GArray *argv) { +static void +scroll_end(WebKitWebView* page, GArray *argv) { (void) page; (void) argv; gtk_adjustment_set_value (uzbl.gui.bar_v, gtk_adjustment_get_upper(uzbl.gui.bar_v) - gtk_adjustment_get_page_size(uzbl.gui.bar_v)); } -static void scroll_vert(WebKitWebView* page, GArray *argv) { +static void +scroll_vert(WebKitWebView* page, GArray *argv) { (void) page; scroll(uzbl.gui.bar_v, argv); } -static void scroll_horz(WebKitWebView* page, GArray *argv) { +static void +scroll_horz(WebKitWebView* page, GArray *argv) { (void) page; scroll(uzbl.gui.bar_h, argv); } @@ -559,7 +566,8 @@ static struct {char *name; Command command[2];} cmdlist[] = { "dehilight", {dehilight, 0} }, { "toggle_insert_mode", {toggle_insert_mode, 0} }, { "runcmd", {runcmd, NOSPLIT} }, - { "set", {set_var, NOSPLIT} } + { "set", {set_var, NOSPLIT} }, + { "dump_config", {act_dump_config, 0} } }; static void @@ -611,6 +619,11 @@ set_var(WebKitWebView *page, GArray *argv) { g_free(ctl_line); } +static void +act_dump_config() { + dump_config(); +} + static void toggle_insert_mode(WebKitWebView *page, GArray *argv) { (void)page; @@ -893,7 +906,8 @@ expand_template(const char *template, gboolean escape_markup) { break; case SYM_MODE: g_string_append(ret, - uzbl.behave.insert_mode?"[I]":"[C]"); + uzbl.behave.insert_mode? + uzbl.behave.insert_indicator:uzbl.behave.cmd_indicator); break; case SYM_MSG: g_string_append(ret, @@ -1457,17 +1471,19 @@ static void parse_cmd_line(const char *ctl_line) { gchar **tokens = NULL; Behaviour *b = &uzbl.behave; + size_t len=0; if(b->mode == M_HTML) { - - if(!strncmp(b->html_endmarker, ctl_line, strlen(b->html_endmarker))) { + len = strlen(b->html_endmarker); + /* ctl_line has trailing '\n' so we check for strlen(ctl_line)-1 */ + if(len == strlen(ctl_line)-1 && + !strncmp(b->html_endmarker, ctl_line, len)) { set_timeout(0); set_var_value("mode", "0"); render_html(); return; } else { - /* set an alarm to kill us after the timeout */ set_timeout(b->html_timeout); g_string_append(b->html_buffer, ctl_line); } @@ -2217,7 +2233,34 @@ set_up_inspector() { g_signal_connect (G_OBJECT (g->inspector), "notify::inspected-uri", G_CALLBACK (inspector_uri_changed_cb), NULL); } +static void +dump_var_hash(gpointer k, gpointer v, gpointer ud) { + (void) ud; + uzbl_cmdprop *c = v; + + if(!c->dump) + return; + + if(c->type == TYPE_STR) + printf("set %s = %s\n", (char *)k, *c->ptr?(char *)*c->ptr:" "); + else if(c->type == TYPE_INT) + printf("set %s = %d\n", (char *)k, (int)*c->ptr); +} + +static void +dump_key_hash(gpointer k, gpointer v, gpointer ud) { + (void) ud; + Action *a = v; + + printf("bind %s = %s %s\n", (char *)k , + (char *)a->name, a->param?(char *)a->param:""); +} +static void +dump_config() { + g_hash_table_foreach(uzbl.comm.proto_var, dump_var_hash, NULL); + g_hash_table_foreach(uzbl.bindings, dump_key_hash, NULL); +} /** -- MAIN -- **/ int @@ -2261,6 +2304,10 @@ main (int argc, char* argv[]) { uzbl.behave.html_timeout = 60; uzbl.behave.base_url = g_strdup("http://invalid"); + /* default mode indicators */ + uzbl.behave.insert_indicator = g_strdup("I"); + uzbl.behave.cmd_indicator = g_strdup("C"); + setup_regex(); setup_scanner(); commands_hash (); diff --git a/uzbl.h b/uzbl.h index cd5e3ef..8618675 100644 --- a/uzbl.h +++ b/uzbl.h @@ -171,6 +171,8 @@ typedef struct { guint mode; gchar* base_url; gchar* html_endmarker; + gchar* insert_indicator; + gchar* cmd_indicator; GString* html_buffer; guint html_timeout; @@ -416,12 +418,24 @@ save_cookies (SoupMessage *msg, static void set_var(WebKitWebView *page, GArray *argv); +static void +act_dump_config(); + static void render_html(); static void set_timeout(int seconds); +static void +dump_var_hash(gpointer k, gpointer v, gpointer ud); + +static void +dump_key_hash(gpointer k, gpointer v, gpointer ud); + +static void +dump_config(); + /* Command callbacks */ static void -- cgit v1.2.3