aboutsummaryrefslogtreecommitdiffhomepage
path: root/uzbl.c
diff options
context:
space:
mode:
authorGravatar Dieter Plaetinck <dieter@plaetinck.be>2009-05-15 15:19:49 +0200
committerGravatar Dieter Plaetinck <dieter@plaetinck.be>2009-05-15 15:19:49 +0200
commitd039532cedb274eca3135a9a5a91946d87f1da9a (patch)
tree730272b30f31509eecee7493eed6919e8d2a990e /uzbl.c
parent8bb034612bc8342dc50d2b5250793c7535ff2ce2 (diff)
parent11160dedad814686986f5b9decc54fb28885fbde (diff)
merge in Duclares stuff
Diffstat (limited to 'uzbl.c')
-rw-r--r--uzbl.c87
1 files changed, 70 insertions, 17 deletions
diff --git a/uzbl.c b/uzbl.c
index 631f338..06844ed 100644
--- a/uzbl.c
+++ b/uzbl.c
@@ -84,7 +84,6 @@ const struct {
{ "http_debug", (void *)&uzbl.behave.http_debug },
{ "modkey", (void *)&uzbl.behave.modkey },
{ "always_insert_mode", (void *)&uzbl.behave.always_insert_mode },
- // TODO: write cmd handlers for the following
{ "useragent", (void *)&uzbl.net.useragent },
{ NULL, NULL }
}, *n2v_p = var_name_to_ptr;
@@ -390,7 +389,8 @@ static struct {char *name; Command command;} cmdlist[] =
{ "spawn", spawn },
{ "exit", close_uzbl },
{ "search", search_text },
- { "insert_mode", set_insert_mode }
+ { "insert_mode", set_insert_mode },
+ { "runcmd", runcmd }
};
static void
@@ -581,15 +581,14 @@ setup_scanner() {
}
static gchar *
-parse_status_template(const char *template) {
+expand_template(const char *template) {
+ if(!template) return NULL;
+
GTokenType token = G_TOKEN_NONE;
GString *ret = g_string_new("");
gchar *buf=NULL;
int sym;
- if(!template)
- return NULL;
-
g_scanner_input_text(uzbl.scan, template, strlen(template));
while(!g_scanner_eof(uzbl.scan) && token != G_TOKEN_LAST) {
token = g_scanner_get_next_token(uzbl.scan);
@@ -632,6 +631,42 @@ parse_status_template(const char *template) {
g_string_append(ret,
uzbl.gui.sbar.msg?uzbl.gui.sbar.msg:"");
break;
+ /* useragent syms */
+ case SYM_WK_MAJ:
+ g_string_append(ret, itos(WEBKIT_MAJOR_VERSION));
+ break;
+ case SYM_WK_MIN:
+ g_string_append(ret, itos(WEBKIT_MINOR_VERSION));
+ break;
+ case SYM_WK_MIC:
+ g_string_append(ret, itos(WEBKIT_MICRO_VERSION));
+ break;
+ case SYM_SYSNAME:
+ g_string_append(ret, uzbl.state.unameinfo.sysname);
+ break;
+ case SYM_NODENAME:
+ g_string_append(ret, uzbl.state.unameinfo.nodename);
+ break;
+ case SYM_KERNREL:
+ g_string_append(ret, uzbl.state.unameinfo.release);
+ break;
+ case SYM_KERNVER:
+ g_string_append(ret, uzbl.state.unameinfo.version);
+ break;
+ case SYM_ARCHSYS:
+ g_string_append(ret, uzbl.state.unameinfo.machine);
+ break;
+ case SYM_ARCHUZBL:
+ g_string_append(ret, ARCH);
+ break;
+#ifdef _GNU_SOURCE
+ case SYM_DOMAINNAME:
+ g_string_append(ret, uzbl.state.unameinfo.domainname);
+ break;
+#endif
+ case SYM_COMMIT:
+ g_string_append(ret, COMMIT);
+ break;
default:
break;
}
@@ -724,11 +759,10 @@ get_var_value(gchar *name) {
void **p = NULL;
if( (p = g_hash_table_lookup(uzbl.comm.proto_var, name)) ) {
- if(!strcmp(name, "status_format")) {
+ if(var_is("status_format", name)
+ || var_is("useragent", name)) {
printf("VAR: %s VALUE: %s\n", name, (char *)*p);
- } else {
- printf("VAR: %s VALUE: %d\n", name, (int)*p);
- }
+ } else printf("VAR: %s VALUE: %d\n", name, (int)*p);
}
return TRUE;
}
@@ -823,6 +857,10 @@ set_var_value(gchar *name, gchar *val) {
uzbl.behave.modmask |= modkeys[i].mask;
}
}
+ else if(var_is("useragent", name)) {
+ if(*p) free(*p);
+ *p = set_useragent(g_strdup(val));
+ }
/* variables that take int values */
else {
int *ip = (int *)p;
@@ -864,8 +902,14 @@ set_var_value(gchar *name, gchar *val) {
return TRUE;
}
+static void
+runcmd(WebKitWebView* page, const char *param) {
+ (void) page;
+ parse_cmd_line(param);
+}
+
static void
-parse_cmd_line(char *ctl_line) {
+parse_cmd_line(const char *ctl_line) {
gchar **tokens;
/* SET command */
@@ -1175,7 +1219,7 @@ update_title (void) {
if (b->show_status) {
gtk_window_set_title (GTK_WINDOW(uzbl.gui.main_window), title_short);
// TODO: we should probably not do this every time we want to update the title..?
- statln = parse_status_template(uzbl.behave.status_format);
+ statln = expand_template(uzbl.behave.status_format);
gtk_label_set_markup(GTK_LABEL(uzbl.gui.mainbar_label), statln);
if (b->status_background) {
GdkColor color;
@@ -1470,6 +1514,18 @@ settings_init () {
g_signal_connect(n->soup_session, "request-queued", G_CALLBACK(handle_cookies), NULL);
}
+static gchar*
+set_useragent(gchar *val) {
+ if (*val == ' ') {
+ g_free(val);
+ return NULL;
+ }
+ gchar *ua = expand_template(val);
+ if (ua)
+ g_object_set(G_OBJECT(uzbl.net.soup_session), SOUP_SESSION_USER_AGENT, ua, NULL);
+ return ua;
+}
+
static void handle_cookies (SoupSession *session, SoupMessage *msg, gpointer user_data){
(void) session;
(void) user_data;
@@ -1563,6 +1619,8 @@ main (int argc, char* argv[]) {
if(setup_signal(SIGTERM, catch_sigterm) == SIG_ERR)
fprintf(stderr, "uzbl: error hooking SIGTERM\n");
+ if(uname(&uzbl.state.unameinfo) == -1)
+ g_printerr("Can't retrieve unameinfo. Your useragent might appear wrong.\n");
setup_regex();
setup_scanner();
@@ -1574,13 +1632,8 @@ main (int argc, char* argv[]) {
else
update_title();
-
make_var_to_name_hash();
create_stdin();
- /*if (uzbl.behave.fifo_dir)
- init_fifo ();*/
- /*if (uzbl.behave.socket_dir)
- init_socket ();*/
gtk_main ();
clean_up();