aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--Makefile7
-rw-r--r--README4
-rw-r--r--docs/CONTRIBUTING7
-rw-r--r--docs/TODO1
-rw-r--r--tests/Makefile17
-rw-r--r--tests/test-1.c48
-rw-r--r--uzbl.c386
-rw-r--r--uzbl.h226
9 files changed, 391 insertions, 306 deletions
diff --git a/.gitignore b/.gitignore
index abbd2d7..2efc5e1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
uzbl
uzblctrl
+uzbl.o
*~
tags
examples/data
diff --git a/Makefile b/Makefile
index b0c4e54..501a859 100644
--- a/Makefile
+++ b/Makefile
@@ -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
diff --git a/README b/README
index 6a04544..8c49410 100644
--- a/README
+++ b/README
@@ -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)
diff --git a/docs/TODO b/docs/TODO
index 80ccb9c..0b4c433 100644
--- a/docs/TODO
+++ b/docs/TODO
@@ -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: */
diff --git a/uzbl.c b/uzbl.c
index 9b33f33..81db05a 100644
--- a/uzbl.c
+++ b/uzbl.c
@@ -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: */
diff --git a/uzbl.h b/uzbl.h
index d67a84e..7c4e5b4 100644
--- a/uzbl.h
+++ b/uzbl.h
@@ -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: */