diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | Makefile | 7 | ||||
-rw-r--r-- | README | 4 | ||||
-rw-r--r-- | docs/CONTRIBUTING | 7 | ||||
-rw-r--r-- | docs/TODO | 1 | ||||
-rw-r--r-- | tests/Makefile | 17 | ||||
-rw-r--r-- | tests/test-1.c | 48 | ||||
-rw-r--r-- | uzbl.c | 386 | ||||
-rw-r--r-- | uzbl.h | 226 |
9 files changed, 391 insertions, 306 deletions
@@ -1,5 +1,6 @@ uzbl uzblctrl +uzbl.o *~ tags examples/data @@ -10,6 +10,11 @@ all: uzbl uzblctrl PREFIX?=$(DESTDIR)/usr +# When compiling unit tests, compile uzbl as a library first +tests: uzbl.o + $(CC) -DUZBL_LIBRARY -shared -Wl uzbl.o -o ./tests/libuzbl.so + cd ./tests/; $(MAKE) + test: uzbl ./uzbl --uri http://www.uzbl.org --verbose @@ -23,6 +28,8 @@ test-share: uzbl clean: rm -f uzbl rm -f uzblctrl + rm -f uzbl.o + cd ./tests/; $(MAKE) clean install: install -d $(PREFIX)/bin @@ -314,8 +314,4 @@ Custom, userdefined scripts (`spawn foo bar`) get first the arguments as specifi ### BUGS -known bugs: - -* Segfaults when using zoom commands (happens when max zoom already reached?). - Please report new issues @ uzbl.org/bugs diff --git a/docs/CONTRIBUTING b/docs/CONTRIBUTING index c26e49a..a45618a 100644 --- a/docs/CONTRIBUTING +++ b/docs/CONTRIBUTING @@ -93,6 +93,13 @@ is, please supply: ### Memory leak checking valgrind --tool=memcheck --leak-check=full ./uzbl +### Writing unit tests + +If you can, write a unit test for a bugfix or new functionality. Add relevant unit +tests to existing .c files in tests/. Others should be made in new source files with +corresponding changes to the tests/Makefile. +Run all tests with `make tests` + ### Debugging / backtraces * compile with -ggdb (enabled by default on experimental tree) @@ -38,6 +38,7 @@ More or less in order of importance/urgency * proxy_url is not a good var name. it's not a url. * regex style page searching? so you can do 'or' and 'and' things. flags like case sensitive etc. * check for real command name, not just the first letter. +* Allow the spacebar to be binded to a command * let users attach handlers to the most common events/signals in uzbl. great use case: automatically calling formfiller for certain sites * document: diff --git a/tests/Makefile b/tests/Makefile new file mode 100644 index 0000000..869490d --- /dev/null +++ b/tests/Makefile @@ -0,0 +1,17 @@ +CFLAGS:=-std=c99 -I$(shell pwd)/../ -L$(shell pwd) -luzbl $(shell pkg-config --cflags gtk+-2.0 webkit-1.0 libsoup-2.4 gthread-2.0) -ggdb -Wall -W -DARCH="\"$(shell uname -m)\"" -lgthread-2.0 -DG_ERRORCHECK_MUTEXES -DCOMMIT="\"$(shell git log | head -n1 | sed "s/.* //")\"" $(CPPFLAGS) +CFLAGS!=echo -std=c99 `pkg-config --cflags gtk+-2.0 webkit-1.0 libsoup-2.4 gthread-2.0` -ggdb -Wall -W -DARCH='"\""'`uname -m`'"\""' -lgthread-2.0 -DG_ERRORCHECK_MUTEXES -DCOMMIT='"\""'`git log | head -n1 | sed "s/.* //"`'"\""' $(CPPFLAGS) + +LDFLAGS:=$(shell pkg-config --libs gtk+-2.0 webkit-1.0 libsoup-2.4 gthread-2.0) -pthread $(LDFLAGS) +LDFLAGS!=echo `pkg-config --libs gtk+-2.0 webkit-1.0 libsoup-2.4 gthread-2.0` -pthread $(LDFLAGS) + +GTESTER:=gtester +GTESTER_REPORT:=gtester-report + +TEST_PROGS:=test-1 + +all: $(TEST_PROGS) + LD_LIBRARY_PATH="$LD_LIBRARY_PATH:." $(GTESTER) --verbose $(TEST_PROGS) + +clean: + rm -f $(TEST_PROGS) + rm -f libuzbl.so diff --git a/tests/test-1.c b/tests/test-1.c new file mode 100644 index 0000000..3a94c9b --- /dev/null +++ b/tests/test-1.c @@ -0,0 +1,48 @@ +/* -*- c-basic-offset: 4; -*- */ +#define _POSIX_SOURCE + +#include <gtk/gtk.h> +#include <gdk/gdkx.h> +#include <gdk/gdkkeysyms.h> +#include <sys/socket.h> +#include <sys/stat.h> +#include <sys/types.h> +#include <sys/un.h> +#include <sys/utsname.h> +#include <sys/time.h> +#include <webkit/webkit.h> +#include <libsoup/soup.h> +#include <JavaScriptCore/JavaScript.h> + +#include <stdio.h> +#include <string.h> +#include <unistd.h> +#include <stdlib.h> +#include <errno.h> +#include <fcntl.h> +#include <signal.h> + +#include <uzbl.h> +#include <config.h> + +Uzbl uzbl; + +static void +test_URI (void) { + setup_scanner(); + uzbl.state.uri = g_strdup("http://www.uzbl.org"); + g_assert_cmpstr(expand_template("URI", FALSE), ==, uzbl.state.uri); + g_free(uzbl.state.uri); +} + +int +main (int argc, char *argv[]) { + g_type_init(); + g_test_init(&argc, &argv, NULL); + + g_test_add_func("/test-1/URI", test_URI); + + return g_test_run(); +} + +/* vi: set et ts=4: */ @@ -57,12 +57,10 @@ #include "uzbl.h" #include "config.h" -static Uzbl uzbl; - - +Uzbl uzbl; /* commandline arguments (set initial values for the state variables) */ -static const +const GOptionEntry entries[] = { { "uri", 'u', 0, G_OPTION_ARG_STRING, &uzbl.state.uri, @@ -82,6 +80,8 @@ GOptionEntry entries[] = /* associate command names to their properties */ typedef const struct { + /* TODO: Make this ambiguous void **ptr into a union { char *char_p; int *int_p; float *float_p; } val; + the PTR() macro is kind of preventing this change at the moment. */ void **ptr; int type; int dump; @@ -184,7 +184,7 @@ const struct { /* construct a hash from the var_name_to_ptr array for quick access */ -static void +void make_var_to_name_hash() { uzbl.comm.proto_var = g_hash_table_new(g_str_hash, g_str_equal); while(n2v_p->name) { @@ -194,9 +194,8 @@ make_var_to_name_hash() { } /* --- UTILITY FUNCTIONS --- */ - enum {EXP_ERR, EXP_SIMPLE_VAR, EXP_BRACED_VAR, EXP_EXPR, EXP_JS}; -static guint +guint get_exp_type(gchar *s) { /* variables */ if(*(s+1) == '(') @@ -215,7 +214,7 @@ return EXP_ERR; * recurse == 1: don't expand '@(command)@' * recurse == 2: don't expand '@<java script>@' */ -static gchar * +gchar * expand(char *s, guint recurse) { uzbl_cmdprop *c; guint etype; @@ -285,9 +284,10 @@ expand(char *s, guint recurse) { if(c->type == TYPE_STR) g_string_append(buf, (gchar *)*c->ptr); else if(c->type == TYPE_INT) { - char *b = itos((int)*c->ptr); - g_string_append(buf, b); - g_free(b); + g_string_append_printf(buf, "%d", (int)*c->ptr); + } + else if(c->type == TYPE_FLOAT) { + g_string_append_printf(buf, "%f", *(float *)c->ptr); } } if(etype == EXP_SIMPLE_VAR) @@ -344,13 +344,13 @@ itos(int val) { return g_strdup(tmp); } -static gchar* +gchar* strfree(gchar *str) { g_free(str); return NULL; } // for freeing & setting to null in one go -static gchar* +gchar* argv_idx(const GArray *a, const guint idx) { return g_array_index(a, gchar*, idx); } -static char * +char * str_replace (const char* search, const char* replace, const char* string) { gchar **buf; char *ret; @@ -362,7 +362,7 @@ str_replace (const char* search, const char* replace, const char* string) { return ret; } -static GArray* +GArray* read_file_by_line (gchar *path) { GIOChannel *chan = NULL; gchar *readbuf = NULL; @@ -388,8 +388,8 @@ read_file_by_line (gchar *path) { return lines; } -static -gchar* parseenv (char* string) { +gchar* +parseenv (char* string) { extern char** environ; gchar* tmpstr = NULL; int i = 0; @@ -414,7 +414,7 @@ gchar* parseenv (char* string) { return string; } -static sigfunc* +sigfunc* setup_signal(int signr, sigfunc *shandler) { struct sigaction nh, oh; @@ -428,7 +428,7 @@ setup_signal(int signr, sigfunc *shandler) { return NULL; } -static void +void clean_up(void) { if (uzbl.behave.fifo_dir) unlink (uzbl.comm.fifo_path); @@ -439,13 +439,14 @@ clean_up(void) { g_string_free(uzbl.state.keycmd, TRUE); g_hash_table_destroy(uzbl.bindings); g_hash_table_destroy(uzbl.behave.commands); + g_scanner_destroy(uzbl.scan); } /* used for html_mode_timeout * be sure to extend this function to use * more timers if needed in other places */ -static void +void set_timeout(int seconds) { struct itimerval t; memset(&t, 0, sizeof t); @@ -457,20 +458,20 @@ set_timeout(int seconds) { /* --- SIGNAL HANDLER --- */ -static void +void catch_sigterm(int s) { (void) s; clean_up(); } -static void +void catch_sigint(int s) { (void) s; clean_up(); exit(EXIT_SUCCESS); } -static void +void catch_alrm(int s) { (void) s; @@ -481,7 +482,7 @@ catch_alrm(int s) { /* --- CALLBACKS --- */ -static gboolean +gboolean new_window_cb (WebKitWebView *web_view, WebKitWebFrame *frame, WebKitNetworkRequest *request, WebKitWebNavigationAction *navigation_action, WebKitWebPolicyDecision *policy_decision, gpointer user_data) { (void) web_view; (void) frame; @@ -495,7 +496,7 @@ new_window_cb (WebKitWebView *web_view, WebKitWebFrame *frame, WebKitNetworkRequ return TRUE; } -static gboolean +gboolean mime_policy_cb(WebKitWebView *web_view, WebKitWebFrame *frame, WebKitNetworkRequest *request, gchar *mime_type, WebKitWebPolicyDecision *policy_decision, gpointer user_data) { (void) frame; (void) request; @@ -528,7 +529,7 @@ create_web_view_cb (WebKitWebView *web_view, WebKitWebFrame *frame, gpointer us return (NULL); } -static gboolean +gboolean download_cb (WebKitWebView *web_view, GObject *download, gpointer user_data) { (void) web_view; (void) user_data; @@ -543,7 +544,7 @@ download_cb (WebKitWebView *web_view, GObject *download, gpointer user_data) { } /* scroll a bar in a given direction */ -static void +void scroll (GtkAdjustment* bar, GArray *argv) { gchar *end; gdouble max_value; @@ -565,32 +566,32 @@ scroll (GtkAdjustment* bar, GArray *argv) { gtk_adjustment_set_value (bar, value); } -static void +void scroll_begin(WebKitWebView* page, GArray *argv, GString *result) { (void) page; (void) argv; (void) result; gtk_adjustment_set_value (uzbl.gui.bar_v, gtk_adjustment_get_lower(uzbl.gui.bar_v)); } -static void +void scroll_end(WebKitWebView* page, GArray *argv, GString *result) { (void) page; (void) argv; (void) result; 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 +void scroll_vert(WebKitWebView* page, GArray *argv, GString *result) { (void) page; (void) result; scroll(uzbl.gui.bar_v, argv); } -static void +void scroll_horz(WebKitWebView* page, GArray *argv, GString *result) { (void) page; (void) result; scroll(uzbl.gui.bar_h, argv); } -static void +void cmd_set_status() { if (!uzbl.behave.show_status) { gtk_widget_hide(uzbl.gui.mainbar); @@ -600,7 +601,7 @@ cmd_set_status() { update_title(); } -static void +void toggle_zoom_type (WebKitWebView* page, GArray *argv, GString *result) { (void)page; (void)argv; @@ -609,7 +610,7 @@ toggle_zoom_type (WebKitWebView* page, GArray *argv, GString *result) { webkit_web_view_set_full_content_zoom (page, !webkit_web_view_get_full_content_zoom (page)); } -static void +void toggle_status_cb (WebKitWebView* page, GArray *argv, GString *result) { (void)page; (void)argv; @@ -624,7 +625,7 @@ toggle_status_cb (WebKitWebView* page, GArray *argv, GString *result) { update_title(); } -static void +void link_hover_cb (WebKitWebView* page, const gchar* title, const gchar* link, gpointer data) { (void) page; (void) title; @@ -638,7 +639,7 @@ link_hover_cb (WebKitWebView* page, const gchar* title, const gchar* link, gpoin update_title(); } -static void +void title_change_cb (WebKitWebView* web_view, GParamSpec param_spec) { (void) web_view; (void) param_spec; @@ -649,7 +650,7 @@ title_change_cb (WebKitWebView* web_view, GParamSpec param_spec) { update_title(); } -static void +void progress_change_cb (WebKitWebView* page, gint progress, gpointer data) { (void) page; (void) data; @@ -657,7 +658,7 @@ progress_change_cb (WebKitWebView* page, gint progress, gpointer data) { update_title(); } -static void +void load_finish_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data) { (void) page; (void) frame; @@ -666,7 +667,7 @@ load_finish_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data) { run_handler(uzbl.behave.load_finish_handler, ""); } -static void +void load_start_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data) { (void) page; (void) frame; @@ -677,7 +678,7 @@ load_start_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data) { run_handler(uzbl.behave.load_start_handler, ""); } -static void +void load_commit_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data) { (void) page; (void) data; @@ -692,29 +693,31 @@ load_commit_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data) { run_handler(uzbl.behave.load_commit_handler, uzbl.state.uri); } -static void +void destroy_cb (GtkWidget* widget, gpointer data) { (void) widget; (void) data; gtk_main_quit (); } -static void +void log_history_cb () { if (uzbl.behave.history_handler) { - time_t rawtime; - struct tm * timeinfo; - char date [80]; - time ( &rawtime ); - timeinfo = localtime ( &rawtime ); - strftime (date, 80, "\"%Y-%m-%d %H:%M:%S\"", timeinfo); + GTimeVal the_time; + gchar *date; + + g_get_current_time(&the_time); + /* no need to wrap this string with quotes since it contains no spaces. + format is like: 2009-06-26T20:02:05.262864Z */ + date = g_time_val_to_iso8601(&the_time); run_handler(uzbl.behave.history_handler, date); + g_free(date); } } /* VIEW funcs (little webkit wrappers) */ -#define VIEWFUNC(name) static void view_##name(WebKitWebView *page, GArray *argv, GString *result){(void)argv; (void)result; webkit_web_view_##name(page);} +#define VIEWFUNC(name) void view_##name(WebKitWebView *page, GArray *argv, GString *result){(void)argv; (void)result; webkit_web_view_##name(page);} VIEWFUNC(reload) VIEWFUNC(reload_bypass_cache) VIEWFUNC(stop_loading) @@ -725,7 +728,7 @@ VIEWFUNC(go_forward) #undef VIEWFUNC /* -- command to callback/function map for things we cannot attach to any signals */ -static struct {char *key; CommandInfo value;} cmdlist[] = +struct {char *key; CommandInfo value;} cmdlist[] = { /* key function no_split */ { "back", {view_go_back, 0} }, { "forward", {view_go_forward, 0} }, @@ -763,7 +766,7 @@ static struct {char *key; CommandInfo value;} cmdlist[] = { "print", {print, TRUE} } }; -static void +void commands_hash(void) { unsigned int i; @@ -797,12 +800,12 @@ new_action(const gchar *name, const gchar *param) { return action; } -static bool +bool file_exists (const char * filename) { return (access(filename, F_OK) == 0); } -static void +void set_var(WebKitWebView *page, GArray *argv, GString *result) { (void) page; (void) result; gchar **split = g_strsplit(argv_idx(argv, 0), "=", 2); @@ -814,7 +817,7 @@ set_var(WebKitWebView *page, GArray *argv, GString *result) { g_strfreev(split); } -static void +void print(WebKitWebView *page, GArray *argv, GString *result) { (void) page; (void) result; gchar* buf; @@ -824,7 +827,7 @@ print(WebKitWebView *page, GArray *argv, GString *result) { g_free(buf); } -static void +void act_bind(WebKitWebView *page, GArray *argv, GString *result) { (void) page; (void) result; gchar **split = g_strsplit(argv_idx(argv, 0), " = ", 2); @@ -835,12 +838,12 @@ act_bind(WebKitWebView *page, GArray *argv, GString *result) { } -static void +void act_dump_config() { dump_config(); } -static void +void toggle_insert_mode(WebKitWebView *page, GArray *argv, GString *result) { (void) page; (void) result; @@ -857,7 +860,7 @@ toggle_insert_mode(WebKitWebView *page, GArray *argv, GString *result) { update_title(); } -static void +void load_uri (WebKitWebView *web_view, GArray *argv, GString *result) { (void) result; @@ -875,10 +878,9 @@ load_uri (WebKitWebView *web_view, GArray *argv, GString *result) { } } - /* Javascript*/ -static JSValueRef +JSValueRef js_run_command (JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) { @@ -906,11 +908,11 @@ js_run_command (JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject, return JSValueMakeString(ctx, js_result_string); } -static JSStaticFunction js_static_functions[] = { +JSStaticFunction js_static_functions[] = { {"run", js_run_command, kJSPropertyAttributeNone}, }; -static void +void js_init() { /* This function creates the class and its definition, only once */ if (!uzbl.js.initialized) { @@ -923,7 +925,7 @@ js_init() { } -static void +void eval_js(WebKitWebView * web_view, gchar *script, GString *result) { WebKitWebFrame *frame; JSGlobalContextRef context; @@ -970,14 +972,13 @@ eval_js(WebKitWebView * web_view, gchar *script, GString *result) { JSStringRelease(js_script); } -static void +void run_js (WebKitWebView * web_view, GArray *argv, GString *result) { - if (argv_idx(argv, 0)) eval_js(web_view, argv_idx(argv, 0), result); } -static void +void run_external_js (WebKitWebView * web_view, GArray *argv, GString *result) { (void) result; if (argv_idx(argv, 0)) { @@ -1011,7 +1012,7 @@ run_external_js (WebKitWebView * web_view, GArray *argv, GString *result) { } } -static void +void search_text (WebKitWebView *page, GArray *argv, const gboolean forward) { if (argv_idx(argv, 0) && (*argv_idx(argv, 0) != '\0')) { if (g_strcmp0 (uzbl.state.searchtx, argv_idx(argv, 0)) != 0) { @@ -1029,26 +1030,26 @@ search_text (WebKitWebView *page, GArray *argv, const gboolean forward) { } } -static void +void search_forward_text (WebKitWebView *page, GArray *argv, GString *result) { (void) result; search_text(page, argv, TRUE); } -static void +void search_reverse_text (WebKitWebView *page, GArray *argv, GString *result) { (void) result; search_text(page, argv, FALSE); } -static void +void dehilight (WebKitWebView *page, GArray *argv, GString *result) { (void) argv; (void) result; webkit_web_view_set_highlight_text_matches (page, FALSE); } -static void +void new_window_load_uri (const gchar * uri) { if (uzbl.behave.new_window) { GString *s = g_string_new (""); @@ -1073,7 +1074,7 @@ new_window_load_uri (const gchar * uri) { g_string_free (to_execute, TRUE); } -static void +void chain (WebKitWebView *page, GArray *argv, GString *result) { (void) page; (void) result; gchar *a = NULL; @@ -1081,12 +1082,13 @@ chain (WebKitWebView *page, GArray *argv, GString *result) { guint i = 0; while ((a = argv_idx(argv, i++))) { parts = g_strsplit (a, " ", 2); - parse_command(parts[0], parts[1], result); + if (parts[0]) + parse_command(parts[0], parts[1], result); g_strfreev (parts); } } -static void +void keycmd (WebKitWebView *page, GArray *argv, GString *result) { (void)page; (void)argv; @@ -1096,7 +1098,7 @@ keycmd (WebKitWebView *page, GArray *argv, GString *result) { update_title(); } -static void +void keycmd_nl (WebKitWebView *page, GArray *argv, GString *result) { (void)page; (void)argv; @@ -1106,7 +1108,7 @@ keycmd_nl (WebKitWebView *page, GArray *argv, GString *result) { update_title(); } -static void +void keycmd_bs (WebKitWebView *page, GArray *argv, GString *result) { gchar *prev; (void)page; @@ -1118,7 +1120,7 @@ keycmd_bs (WebKitWebView *page, GArray *argv, GString *result) { update_title(); } -static void +void close_uzbl (WebKitWebView *page, GArray *argv, GString *result) { (void)page; (void)argv; @@ -1127,7 +1129,7 @@ close_uzbl (WebKitWebView *page, GArray *argv, GString *result) { } /* --Statusbar functions-- */ -static char* +char* build_progressbar_ascii(int percent) { int width=uzbl.gui.sbar.progress_w; int i; @@ -1146,7 +1148,7 @@ build_progressbar_ascii(int percent) { return g_string_free(bar, FALSE); } -static void +void setup_scanner() { const GScannerConfig scan_config = { ( @@ -1201,7 +1203,7 @@ setup_scanner() { } } -static gchar * +gchar * expand_template(const char *template, gboolean escape_markup) { if(!template) return NULL; @@ -1219,14 +1221,14 @@ expand_template(const char *template, gboolean escape_markup) { switch(sym) { case SYM_URI: if(escape_markup) { - buf = uzbl.state.uri? - g_markup_printf_escaped("%s", uzbl.state.uri):g_strdup(""); + buf = uzbl.state.uri ? + g_markup_printf_escaped("%s", uzbl.state.uri) : g_strdup(""); g_string_append(ret, buf); g_free(buf); } else - g_string_append(ret, uzbl.state.uri? - uzbl.state.uri:g_strdup("")); + g_string_append(ret, uzbl.state.uri ? + uzbl.state.uri : g_strdup("")); break; case SYM_LOADPRGS: buf = itos(uzbl.gui.sbar.load_progress); @@ -1240,51 +1242,51 @@ expand_template(const char *template, gboolean escape_markup) { break; case SYM_TITLE: if(escape_markup) { - buf = uzbl.gui.main_title? - g_markup_printf_escaped("%s", uzbl.gui.main_title):g_strdup(""); + buf = uzbl.gui.main_title ? + g_markup_printf_escaped("%s", uzbl.gui.main_title) : g_strdup(""); g_string_append(ret, buf); g_free(buf); } else - g_string_append(ret, uzbl.gui.main_title? - uzbl.gui.main_title:g_strdup("")); + g_string_append(ret, uzbl.gui.main_title ? + uzbl.gui.main_title : ""); break; case SYM_SELECTED_URI: if(escape_markup) { - buf = uzbl.state.selected_url? - g_markup_printf_escaped("%s", uzbl.state.selected_url):g_strdup(""); + buf = uzbl.state.selected_url ? + g_markup_printf_escaped("%s", uzbl.state.selected_url) : g_strdup(""); g_string_append(ret, buf); g_free(buf); } else - g_string_append(ret, uzbl.state.selected_url? - uzbl.state.selected_url:g_strdup("")); + g_string_append(ret, uzbl.state.selected_url ? + uzbl.state.selected_url : ""); break; case SYM_NAME: buf = itos(uzbl.xwin); g_string_append(ret, - uzbl.state.instance_name?uzbl.state.instance_name:buf); + uzbl.state.instance_name ? uzbl.state.instance_name : buf); g_free(buf); break; case SYM_KEYCMD: if(escape_markup) { - buf = uzbl.state.keycmd->str? - g_markup_printf_escaped("%s", uzbl.state.keycmd->str):g_strdup(""); + buf = uzbl.state.keycmd->str ? + g_markup_printf_escaped("%s", uzbl.state.keycmd->str) : g_strdup(""); g_string_append(ret, buf); g_free(buf); } else - g_string_append(ret, uzbl.state.keycmd->str? - uzbl.state.keycmd->str:g_strdup("")); + g_string_append(ret, uzbl.state.keycmd->str ? + uzbl.state.keycmd->str : ""); break; case SYM_MODE: g_string_append(ret, - uzbl.behave.insert_mode? - uzbl.behave.insert_indicator:uzbl.behave.cmd_indicator); + uzbl.behave.insert_mode ? + uzbl.behave.insert_indicator : uzbl.behave.cmd_indicator); break; case SYM_MSG: g_string_append(ret, - uzbl.gui.sbar.msg?uzbl.gui.sbar.msg:""); + uzbl.gui.sbar.msg ? uzbl.gui.sbar.msg : ""); break; /* useragent syms */ case SYM_WK_MAJ: @@ -1333,9 +1335,7 @@ expand_template(const char *template, gboolean escape_markup) { } } else if(token == G_TOKEN_INT) { - buf = itos(g_scanner_cur_value(uzbl.scan).v_int); - g_string_append(ret, buf); - g_free(buf); + g_string_append_printf(ret, "%lu", g_scanner_cur_value(uzbl.scan).v_int); } else if(token == G_TOKEN_IDENTIFIER) { g_string_append(ret, (gchar *)g_scanner_cur_value(uzbl.scan).v_identifier); @@ -1343,20 +1343,26 @@ expand_template(const char *template, gboolean escape_markup) { else if(token == G_TOKEN_CHAR) { g_string_append_c(ret, (gchar)g_scanner_cur_value(uzbl.scan).v_char); } + else if(token == G_TOKEN_ERROR) { + g_scanner_error(uzbl.scan, "Token error in template ('%s') at line %d, column %d.", + template, + g_scanner_cur_line(uzbl.scan), + g_scanner_cur_position(uzbl.scan)); + } } return g_string_free(ret, FALSE); } /* --End Statusbar functions-- */ -static void +void sharg_append(GArray *a, const gchar *str) { const gchar *s = (str ? str : ""); g_array_append_val(a, s); } // make sure that the args string you pass can properly be interpreted (eg properly escaped against whitespace, quotes etc) -static gboolean +gboolean run_command (const gchar *command, const guint npre, const gchar **args, const gboolean sync, char **output_stdout) { //command <uzbl conf> <uzbl pid> <uzbl win id> <uzbl fifo file> <uzbl socket file> [args] @@ -1413,7 +1419,7 @@ run_command (const gchar *command, const guint npre, const gchar **args, return result; } -static gchar** +gchar** split_quoted(const gchar* src, const gboolean unquote) { /* split on unquoted space, return array of strings; remove a layer of quotes and backslashes if unquote */ @@ -1450,7 +1456,7 @@ split_quoted(const gchar* src, const gboolean unquote) { return ret; } -static void +void spawn(WebKitWebView *web_view, GArray *argv, GString *result) { (void)web_view; (void)result; //TODO: allow more control over argument order so that users can have some arguments before the default ones from run_command, and some after @@ -1458,7 +1464,7 @@ spawn(WebKitWebView *web_view, GArray *argv, GString *result) { run_command(argv_idx(argv, 0), 0, ((const gchar **) (argv->data + sizeof(gchar*))), FALSE, NULL); } -static void +void spawn_sync(WebKitWebView *web_view, GArray *argv, GString *result) { (void)web_view; (void)result; @@ -1467,7 +1473,7 @@ spawn_sync(WebKitWebView *web_view, GArray *argv, GString *result) { TRUE, &uzbl.comm.sync_stdout); } -static void +void spawn_sh(WebKitWebView *web_view, GArray *argv, GString *result) { (void)web_view; (void)result; if (!uzbl.behave.shell_cmd) { @@ -1488,7 +1494,7 @@ spawn_sh(WebKitWebView *web_view, GArray *argv, GString *result) { g_strfreev (cmd); } -static void +void spawn_sh_sync(WebKitWebView *web_view, GArray *argv, GString *result) { (void)web_view; (void)result; if (!uzbl.behave.shell_cmd) { @@ -1510,7 +1516,7 @@ spawn_sh_sync(WebKitWebView *web_view, GArray *argv, GString *result) { g_strfreev (cmd); } -static void +void parse_command(const char *cmd, const char *param, GString *result) { CommandInfo *c; @@ -1544,7 +1550,7 @@ parse_command(const char *cmd, const char *param, GString *result) { g_printerr ("command \"%s\" not understood. ignoring.\n", cmd); } -static void +void set_proxy_url() { SoupURI *suri; @@ -1563,7 +1569,7 @@ set_proxy_url() { return; } -static void +void set_icon() { if(file_exists(uzbl.gui.icon)) { if (uzbl.gui.main_window) @@ -1573,7 +1579,7 @@ set_icon() { } } -static void +void cmd_load_uri() { GArray *a = g_array_new (TRUE, FALSE, sizeof(gchar*)); g_array_append_val (a, uzbl.state.uri); @@ -1581,26 +1587,26 @@ cmd_load_uri() { g_array_free (a, TRUE); } -static void +void cmd_always_insert_mode() { uzbl.behave.insert_mode = uzbl.behave.always_insert_mode ? TRUE : FALSE; update_title(); } -static void +void cmd_max_conns() { g_object_set(G_OBJECT(uzbl.net.soup_session), SOUP_SESSION_MAX_CONNS, uzbl.net.max_conns, NULL); } -static void +void cmd_max_conns_host() { g_object_set(G_OBJECT(uzbl.net.soup_session), SOUP_SESSION_MAX_CONNS_PER_HOST, uzbl.net.max_conns_host, NULL); } -static void +void cmd_http_debug() { soup_session_remove_feature (uzbl.net.soup_session, SOUP_SESSION_FEATURE(uzbl.net.soup_logger)); @@ -1612,12 +1618,12 @@ cmd_http_debug() { SOUP_SESSION_FEATURE(uzbl.net.soup_logger)); } -static WebKitWebSettings* +WebKitWebSettings* view_settings() { return webkit_web_view_get_settings(uzbl.gui.web_view); } -static void +void cmd_font_size() { WebKitWebSettings *ws = view_settings(); if (uzbl.behave.font_size > 0) { @@ -1633,91 +1639,91 @@ cmd_font_size() { } } -static void +void cmd_zoom_level() { webkit_web_view_set_zoom_level (uzbl.gui.web_view, uzbl.behave.zoom_level); } -static void +void cmd_disable_plugins() { g_object_set (G_OBJECT(view_settings()), "enable-plugins", !uzbl.behave.disable_plugins, NULL); } -static void +void cmd_disable_scripts() { g_object_set (G_OBJECT(view_settings()), "enable-scripts", !uzbl.behave.disable_scripts, NULL); } -static void +void cmd_minimum_font_size() { g_object_set (G_OBJECT(view_settings()), "minimum-font-size", uzbl.behave.minimum_font_size, NULL); } -static void +void cmd_autoload_img() { g_object_set (G_OBJECT(view_settings()), "auto-load-images", uzbl.behave.autoload_img, NULL); } -static void +void cmd_autoshrink_img() { g_object_set (G_OBJECT(view_settings()), "auto-shrink-images", uzbl.behave.autoshrink_img, NULL); } -static void +void cmd_enable_spellcheck() { g_object_set (G_OBJECT(view_settings()), "enable-spell-checking", uzbl.behave.enable_spellcheck, NULL); } -static void +void cmd_enable_private() { g_object_set (G_OBJECT(view_settings()), "enable-private-browsing", uzbl.behave.enable_private, NULL); } -static void +void cmd_print_bg() { g_object_set (G_OBJECT(view_settings()), "print-backgrounds", uzbl.behave.print_bg, NULL); } -static void +void cmd_style_uri() { g_object_set (G_OBJECT(view_settings()), "user-stylesheet-uri", uzbl.behave.style_uri, NULL); } -static void +void cmd_resizable_txt() { g_object_set (G_OBJECT(view_settings()), "resizable-text-areas", uzbl.behave.resizable_txt, NULL); } -static void +void cmd_default_encoding() { g_object_set (G_OBJECT(view_settings()), "default-encoding", uzbl.behave.default_encoding, NULL); } -static void +void cmd_enforce_96dpi() { g_object_set (G_OBJECT(view_settings()), "enforce-96-dpi", uzbl.behave.enforce_96dpi, NULL); } -static void +void cmd_caret_browsing() { g_object_set (G_OBJECT(view_settings()), "enable-caret-browsing", uzbl.behave.caret_browsing, NULL); } -static void +void cmd_cookie_handler() { gchar **split = g_strsplit(uzbl.behave.cookie_handler, " ", 2); /* pitfall: doesn't handle chain actions; must the sync_ action manually */ @@ -1730,7 +1736,7 @@ cmd_cookie_handler() { g_strfreev (split); } -static void +void cmd_new_window() { gchar **split = g_strsplit(uzbl.behave.new_window, " ", 2); /* pitfall: doesn't handle chain actions; must the sync_ action manually */ @@ -1743,17 +1749,17 @@ cmd_new_window() { g_strfreev (split); } -static void +void cmd_fifo_dir() { uzbl.behave.fifo_dir = init_fifo(uzbl.behave.fifo_dir); } -static void +void cmd_socket_dir() { uzbl.behave.socket_dir = init_socket(uzbl.behave.socket_dir); } -static void +void cmd_inject_html() { if(uzbl.behave.inject_html) { webkit_web_view_load_html_string (uzbl.gui.web_view, @@ -1761,7 +1767,7 @@ cmd_inject_html() { } } -static void +void cmd_modkey() { int i; char *buf; @@ -1779,7 +1785,7 @@ cmd_modkey() { } } -static void +void cmd_useragent() { if (*uzbl.net.useragent == ' ') { g_free (uzbl.net.useragent); @@ -1793,7 +1799,7 @@ cmd_useragent() { } } -static void +void move_statusbar() { gtk_widget_ref(uzbl.gui.scrolled_win); gtk_widget_ref(uzbl.gui.mainbar); @@ -1814,7 +1820,7 @@ move_statusbar() { return; } -static gboolean +gboolean set_var_value(gchar *name, gchar *val) { uzbl_cmdprop *c = NULL; char *endp = NULL; @@ -1844,7 +1850,7 @@ set_var_value(gchar *name, gchar *val) { return TRUE; } -static void +void render_html() { Behaviour *b = &uzbl.behave; @@ -1857,7 +1863,7 @@ render_html() { } enum {M_CMD, M_HTML}; -static void +void parse_cmd_line(const char *ctl_line, GString *result) { Behaviour *b = &uzbl.behave; size_t len=0; @@ -1897,7 +1903,7 @@ parse_cmd_line(const char *ctl_line, GString *result) { } } -static gchar* +gchar* build_stream_name(int type, const gchar* dir) { char *xwin_str = NULL; State *s = &uzbl.state; @@ -1917,7 +1923,7 @@ build_stream_name(int type, const gchar* dir) { return str; } -static gboolean +gboolean control_fifo(GIOChannel *gio, GIOCondition condition) { if (uzbl.state.verbose) printf("triggered\n"); @@ -1943,7 +1949,7 @@ control_fifo(GIOChannel *gio, GIOCondition condition) { return TRUE; } -static gchar* +gchar* init_fifo(gchar *dir) { /* return dir or, on error, free dir and return NULL */ if (uzbl.comm.fifo_path) { /* get rid of the old fifo if one exists */ if (unlink(uzbl.comm.fifo_path) == -1) @@ -1952,11 +1958,6 @@ init_fifo(gchar *dir) { /* return dir or, on error, free dir and return NULL */ uzbl.comm.fifo_path = NULL; } - if (*dir == ' ') { /* space unsets the variable */ - g_free (dir); - return NULL; - } - GIOChannel *chan = NULL; GError *error = NULL; gchar *path = build_stream_name(FIFO, dir); @@ -1983,7 +1984,7 @@ init_fifo(gchar *dir) { /* return dir or, on error, free dir and return NULL */ return NULL; } -static gboolean +gboolean control_stdin(GIOChannel *gio, GIOCondition condition) { (void) condition; gchar *ctl_line = NULL; @@ -1999,7 +2000,7 @@ control_stdin(GIOChannel *gio, GIOCondition condition) { return TRUE; } -static void +void create_stdin () { GIOChannel *chan = NULL; GError *error = NULL; @@ -2018,7 +2019,7 @@ create_stdin () { if (error) g_error_free (error); } -static gboolean +gboolean control_socket(GIOChannel *chan) { struct sockaddr_un remote; unsigned int t = sizeof(remote); @@ -2036,7 +2037,7 @@ control_socket(GIOChannel *chan) { return TRUE; } -static gboolean +gboolean control_client_socket(GIOChannel *clientchan) { char *ctl_line; GString *result = g_string_new(""); @@ -2072,7 +2073,7 @@ control_client_socket(GIOChannel *clientchan) { return TRUE; } -static gchar* +gchar* init_socket(gchar *dir) { /* return dir or, on error, free dir and return NULL */ if (uzbl.comm.socket_path) { /* remove an existing socket should one exist */ if (unlink(uzbl.comm.socket_path) == -1) @@ -2121,7 +2122,7 @@ init_socket(gchar *dir) { /* return dir or, on error, free dir and return NULL * it will probably improve performance if we would "cache" the processed variant, but for now it works well enough... */ // this function may be called very early when the templates are not set (yet), hence the checks -static void +void update_title (void) { Behaviour *b = &uzbl.behave; gchar *parsed; @@ -2157,7 +2158,7 @@ update_title (void) { } } -static gboolean +gboolean key_press_cb (GtkWidget* window, GdkEventKey* event) { //TRUE to stop other handlers from being invoked for the event. FALSE to propagate the event further. @@ -2215,7 +2216,7 @@ key_press_cb (GtkWidget* window, GdkEventKey* event) return TRUE; } -static void +void run_keycmd(const gboolean key_ret) { /* run the keycmd immediately if it isn't incremental and doesn't take args */ Action *act; @@ -2253,7 +2254,7 @@ run_keycmd(const gboolean key_ret) { g_string_free (short_keys_inc, TRUE); } -static void +void exec_paramcmd(const Action *act, const guint i) { GString *parampart = g_string_new (uzbl.state.keycmd->str); GString *actionname = g_string_new (""); @@ -2270,7 +2271,7 @@ exec_paramcmd(const Action *act, const guint i) { } -static GtkWidget* +GtkWidget* create_browser () { GUI *g = &uzbl.gui; @@ -2296,7 +2297,7 @@ create_browser () { return scrolled_window; } -static GtkWidget* +GtkWidget* create_mainbar () { GUI *g = &uzbl.gui; @@ -2315,8 +2316,8 @@ create_mainbar () { return g->mainbar; } -static -GtkWidget* create_window () { +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"); @@ -2326,8 +2327,8 @@ GtkWidget* create_window () { return window; } -static -GtkPlug* create_plug () { +GtkPlug* +create_plug () { GtkPlug* plug = GTK_PLUG (gtk_plug_new (uzbl.state.socket_id)); g_signal_connect (G_OBJECT (plug), "destroy", G_CALLBACK (destroy_cb), NULL); g_signal_connect (G_OBJECT (plug), "key-press-event", G_CALLBACK (key_press_cb), NULL); @@ -2336,7 +2337,7 @@ GtkPlug* create_plug () { } -static gchar** +gchar** inject_handler_args(const gchar *actname, const gchar *origargs, const gchar *newargs) { /* If actname is one that calls an external command, this function will inject @@ -2344,7 +2345,7 @@ inject_handler_args(const gchar *actname, const gchar *origargs, const gchar *ne come become after the body of the script (in sh) or after the name of the command to execute (in spawn). i.e. sh <body> <userargs> becomes sh <body> <ARGS> <userargs> and - span <command> <userargs> becomes spawn <command> <ARGS> <userargs>. + spawn <command> <userargs> becomes spawn <command> <ARGS> <userargs>. The return value consist of two strings: the action (sh, ...) and its args. @@ -2352,6 +2353,7 @@ inject_handler_args(const gchar *actname, const gchar *origargs, const gchar *ne gets duplicated. */ GArray *rets = g_array_new(TRUE, FALSE, sizeof(gchar*)); + /* Arrr! Here be memory leaks */ gchar *actdup = g_strdup(actname); g_array_append_val(rets, actdup); @@ -2378,7 +2380,7 @@ inject_handler_args(const gchar *actname, const gchar *origargs, const gchar *ne return (gchar**)g_array_free(rets, FALSE); } -static void +void run_handler (const gchar *act, const gchar *args) { /* Consider this code a temporary hack to make the handlers usable. In practice, all this splicing, injection, and reconstruction is @@ -2437,7 +2439,7 @@ run_handler (const gchar *act, const gchar *args) { g_strfreev(parts); } -static void +void add_binding (const gchar *key, const gchar *act) { char **parts = g_strsplit(act, " ", 2); Action *action; @@ -2456,7 +2458,7 @@ add_binding (const gchar *key, const gchar *act) { g_strfreev(parts); } -static gchar* +gchar* get_xdg_var (XDG_Var xdg) { const gchar* actual_value = getenv (xdg.environmental); const gchar* home = getenv ("HOME"); @@ -2475,7 +2477,7 @@ get_xdg_var (XDG_Var xdg) { return return_value; } -static gchar* +gchar* find_xdg_file (int xdg_type, char* filename) { /* xdg_type = 0 => config xdg_type = 1 => data @@ -2508,7 +2510,7 @@ find_xdg_file (int xdg_type, char* filename) { return NULL; } } -static void +void settings_init () { State *s = &uzbl.state; Network *n = &uzbl.net; @@ -2545,7 +2547,7 @@ settings_init () { g_signal_connect_after(n->soup_session, "request-started", G_CALLBACK(handle_cookies), NULL); } -static void handle_cookies (SoupSession *session, SoupMessage *msg, gpointer user_data){ +void handle_cookies (SoupSession *session, SoupMessage *msg, gpointer user_data){ (void) session; (void) user_data; if (!uzbl.behave.cookie_handler) @@ -2568,7 +2570,7 @@ static void handle_cookies (SoupSession *session, SoupMessage *msg, gpointer use g_string_free(s, TRUE); } -static void +void save_cookies (SoupMessage *msg, gpointer user_data){ (void) user_data; GSList *ck; @@ -2586,14 +2588,14 @@ save_cookies (SoupMessage *msg, gpointer user_data){ } /* --- WEBINSPECTOR --- */ -static void +void hide_window_cb(GtkWidget *widget, gpointer data) { (void) data; gtk_widget_hide(widget); } -static WebKitWebView* +WebKitWebView* create_inspector_cb (WebKitWebInspector* web_inspector, WebKitWebView* page, gpointer data){ (void) data; (void) page; @@ -2622,7 +2624,7 @@ create_inspector_cb (WebKitWebInspector* web_inspector, WebKitWebView* page, gpo return WEBKIT_WEB_VIEW(new_web_view); } -static gboolean +gboolean inspector_show_window_cb (WebKitWebInspector* inspector){ (void) inspector; gtk_widget_show(uzbl.gui.inspector_window); @@ -2630,37 +2632,37 @@ inspector_show_window_cb (WebKitWebInspector* inspector){ } /* TODO: Add variables and code to make use of these functions */ -static gboolean +gboolean inspector_close_window_cb (WebKitWebInspector* inspector){ (void) inspector; return TRUE; } -static gboolean +gboolean inspector_attach_window_cb (WebKitWebInspector* inspector){ (void) inspector; return FALSE; } -static gboolean +gboolean inspector_detach_window_cb (WebKitWebInspector* inspector){ (void) inspector; return FALSE; } -static gboolean +gboolean inspector_uri_changed_cb (WebKitWebInspector* inspector){ (void) inspector; return FALSE; } -static gboolean +gboolean inspector_inspector_destroyed_cb (WebKitWebInspector* inspector){ (void) inspector; return FALSE; } -static void +void set_up_inspector() { GUI *g = &uzbl.gui; WebKitWebSettings *settings = view_settings(); @@ -2677,7 +2679,7 @@ set_up_inspector() { g_signal_connect (G_OBJECT (g->inspector), "notify::inspected-uri", G_CALLBACK (inspector_uri_changed_cb), NULL); } -static void +void dump_var_hash(gpointer k, gpointer v, gpointer ud) { (void) ud; uzbl_cmdprop *c = v; @@ -2686,12 +2688,14 @@ dump_var_hash(gpointer k, gpointer v, gpointer ud) { return; if(c->type == TYPE_STR) - printf("set %s = %s\n", (char *)k, *c->ptr?(char *)*c->ptr:" "); + 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); + else if(c->type == TYPE_FLOAT) + printf("set %s = %f\n", (char *)k, *(float *)c->ptr); } -static void +void dump_key_hash(gpointer k, gpointer v, gpointer ud) { (void) ud; Action *a = v; @@ -2700,12 +2704,13 @@ dump_key_hash(gpointer k, gpointer v, gpointer ud) { (char *)a->name, a->param?(char *)a->param:""); } -static void +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); } +#ifndef UZBL_LIBRARY /** -- MAIN -- **/ int main (int argc, char* argv[]) { @@ -2829,5 +2834,6 @@ main (int argc, char* argv[]) { return EXIT_SUCCESS; } +#endif /* vi: set et ts=4: */ @@ -226,79 +226,82 @@ XDG_Var XDG[] = }; /* Functions */ -static void +gchar * +expand_template(const char *template, gboolean escape_markup); + +void setup_scanner(); char * itos(int val); -static char * +char * str_replace (const char* search, const char* replace, const char* string); -static GArray* +GArray* read_file_by_line (gchar *path); -static -gchar* parseenv (char* string); +gchar* +parseenv (char* string); -static void +void clean_up(void); -static void +void catch_sigterm(int s); -static sigfunc * +sigfunc * setup_signal(int signe, sigfunc *shandler); -static gboolean +gboolean set_var_value(gchar *name, gchar *val); -static void +void print(WebKitWebView *page, GArray *argv, GString *result); -static gboolean +gboolean new_window_cb (WebKitWebView *web_view, WebKitWebFrame *frame, WebKitNetworkRequest *request, WebKitWebNavigationAction *navigation_action, WebKitWebPolicyDecision *policy_decision, gpointer user_data); -static gboolean +gboolean mime_policy_cb(WebKitWebView *web_view, WebKitWebFrame *frame, WebKitNetworkRequest *request, gchar *mime_type, WebKitWebPolicyDecision *policy_decision, gpointer user_data); WebKitWebView* create_web_view_cb (WebKitWebView *web_view, WebKitWebFrame *frame, gpointer user_data); -static gboolean +gboolean download_cb (WebKitWebView *web_view, GObject *download, gpointer user_data); -static void +void toggle_zoom_type (WebKitWebView* page, GArray *argv, GString *result); -static void +void toggle_status_cb (WebKitWebView* page, GArray *argv, GString *result); -static void +void link_hover_cb (WebKitWebView* page, const gchar* title, const gchar* link, gpointer data); -static void +void title_change_cb (WebKitWebView* web_view, GParamSpec param_spec); -static void +void progress_change_cb (WebKitWebView* page, gint progress, gpointer data); -static void +void load_commit_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data); -static void +void load_start_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data); -static void +void load_finish_cb (WebKitWebView* page, WebKitWebFrame* frame, gpointer data); -static void +void destroy_cb (GtkWidget* widget, gpointer data); -static void +void log_history_cb (); -static void +void commands_hash(void); void @@ -307,171 +310,170 @@ free_action(gpointer act); Action* new_action(const gchar *name, const gchar *param); -static bool +bool file_exists (const char * filename); -static void +void toggle_insert_mode(WebKitWebView *page, GArray *argv, GString *result); -static void +void load_uri (WebKitWebView * web_view, GArray *argv, GString *result); -static void +void new_window_load_uri (const gchar * uri); -static void +void chain (WebKitWebView *page, GArray *argv, GString *result); -static void +void keycmd (WebKitWebView *page, GArray *argv, GString *result); -static void +void keycmd_nl (WebKitWebView *page, GArray *argv, GString *result); -static void +void keycmd_bs (WebKitWebView *page, GArray *argv, GString *result); -static void +void close_uzbl (WebKitWebView *page, GArray *argv, GString *result); -static gboolean +gboolean run_command(const gchar *command, const guint npre, const gchar **args, const gboolean sync, char **output_stdout); -static void +void spawn(WebKitWebView *web_view, GArray *argv, GString *result); -static void +void spawn_sh(WebKitWebView *web_view, GArray *argv, GString *result); -static void +void spawn_sync(WebKitWebView *web_view, GArray *argv, GString *result); -static void +void spawn_sh_sync(WebKitWebView *web_view, GArray *argv, GString *result); -static void +void parse_command(const char *cmd, const char *param, GString *result); -static void +void parse_cmd_line(const char *ctl_line, GString *result); -static gchar* +gchar* build_stream_name(int type, const gchar *dir); -static gboolean +gboolean control_fifo(GIOChannel *gio, GIOCondition condition); -static gchar* +gchar* init_fifo(gchar *dir); -static gboolean +gboolean control_stdin(GIOChannel *gio, GIOCondition condition); -static void +void create_stdin(); -static gchar* +gchar* init_socket(gchar *dir); -static gboolean +gboolean control_socket(GIOChannel *chan); -static gboolean +gboolean control_client_socket(GIOChannel *chan); -static void +void update_title (void); -static gboolean +gboolean key_press_cb (GtkWidget* window, GdkEventKey* event); -static void +void run_keycmd(const gboolean key_ret); -static void +void exec_paramcmd(const Action* act, const guint i); -static GtkWidget* +GtkWidget* create_browser (); -static GtkWidget* +GtkWidget* create_mainbar (); -static -GtkWidget* create_window (); +GtkWidget* +create_window (); -static -GtkPlug* create_plug (); +GtkPlug* +create_plug (); -static void +void run_handler (const gchar *act, const gchar *args); -static void +void add_binding (const gchar *key, const gchar *act); -static gchar* +gchar* get_xdg_var (XDG_Var xdg); -static gchar* +gchar* find_xdg_file (int xdg_type, char* filename); -static void +void settings_init (); -static void +void search_text (WebKitWebView *page, GArray *argv, const gboolean forward); -static void +void search_forward_text (WebKitWebView *page, GArray *argv, GString *result); -static void +void search_reverse_text (WebKitWebView *page, GArray *argv, GString *result); -static void +void dehilight (WebKitWebView *page, GArray *argv, GString *result); -static void +void run_js (WebKitWebView * web_view, GArray *argv, GString *result); -static void +void run_external_js (WebKitWebView * web_view, GArray *argv, GString *result); -static void +void eval_js(WebKitWebView * web_view, gchar *script, GString *result); -static void handle_cookies (SoupSession *session, +void handle_cookies (SoupSession *session, SoupMessage *msg, gpointer user_data); -static void +void save_cookies (SoupMessage *msg, gpointer user_data); -static void +void set_var(WebKitWebView *page, GArray *argv, GString *result); -static void +void act_bind(WebKitWebView *page, GArray *argv, GString *result); -static void +void act_dump_config(); -static void +void render_html(); -static void +void set_timeout(int seconds); -static void +void dump_var_hash(gpointer k, gpointer v, gpointer ud); -static void +void dump_key_hash(gpointer k, gpointer v, gpointer ud); -static void +void dump_config(); - typedef void (*Command)(WebKitWebView*, GArray *argv, GString *result); typedef struct { Command function; @@ -479,99 +481,99 @@ typedef struct { } CommandInfo; /* Command callbacks */ -static void +void cmd_load_uri(); -static void +void cmd_set_status(); -static void +void set_proxy_url(); -static void +void set_icon(); -static void +void cmd_cookie_handler(); -static void +void cmd_new_window(); -static void +void move_statusbar(); -static void +void cmd_always_insert_mode(); -static void +void cmd_http_debug(); -static void +void cmd_max_conns(); -static void +void cmd_max_conns_host(); /* exported WebKitWebSettings properties */ -static void +void cmd_font_size(); -static void +void cmd_zoom_level(); -static void +void cmd_disable_plugins(); -static void +void cmd_disable_scripts(); -static void +void cmd_minimum_font_size(); -static void +void cmd_fifo_dir(); -static void +void cmd_socket_dir(); -static void +void cmd_modkey(); -static void +void cmd_useragent() ; -static void +void cmd_autoload_img(); -static void +void cmd_autoshrink_img(); -static void +void cmd_enable_spellcheck(); -static void +void cmd_enable_private(); -static void +void cmd_print_bg(); -static void +void cmd_style_uri(); -static void +void cmd_resizable_txt(); -static void +void cmd_default_encoding(); -static void +void cmd_enforce_96dpi(); -static void +void cmd_inject_html(); -static void +void cmd_caret_browsing(); /* vi: set et ts=4: */ |