{ "search_reverse", {search_reverse_text, NOSPLIT} },
{ "dehilight", {dehilight, 0} },
{ "toggle_insert_mode", {toggle_insert_mode, 0} },
- { "runcmd", {runcmd, NOSPLIT} },
{ "set", {set_var, NOSPLIT} },
{ "get", {get_var, NOSPLIT} },
+ { "bind", {act_bind, NOSPLIT} },
{ "dump_config", {act_dump_config, 0} },
{ "keycmd", {keycmd, NOSPLIT} },
{ "keycmd_nl", {keycmd_nl, NOSPLIT} },
static void
set_var(WebKitWebView *page, GArray *argv) {
(void) page;
- gchar *ctl_line;
-
- ctl_line = g_strdup_printf("%s %s", "set", argv_idx(argv, 0));
- parse_cmd_line(ctl_line);
- g_free(ctl_line);
+ gchar **split = g_strsplit(argv_idx(argv, 0), "=", 2);
+ gchar *value = parseenv(g_strdup(split[1] ? g_strchug(split[1]) : " "));
+ set_var_value(g_strstrip(split[0]), value);
+ g_free(value);
+ g_strfreev(split);
}
static void
}
static void
+act_bind(WebKitWebView *page, GArray *argv) {
+ (void) page;
+ gchar **split = g_strsplit(argv_idx(argv, 0), " = ", 2);
+ gchar *value = parseenv(g_strdup(split[1] ? g_strchug(split[1]) : " "));
+ add_binding(g_strstrip(split[0]), value);
+ g_free(value);
+ g_strfreev(split);
+}
+
+
+static void
act_dump_config() {
dump_config();
}
g_string_append_printf(s, " -- result: %s", (result ? "true" : "false"));
printf("%s\n", s->str);
g_string_free(s, TRUE);
+ if(stdout) {
+ printf("Stdout: %s\n", *stdout);
+ }
}
if (err) {
g_printerr("error on run_command: %s\n", err->message);
g_printerr ("command \"%s\" not understood. ignoring.\n", cmd);
}
-/* command parser */
-static void
-setup_regex() {
- uzbl.comm.get_regex = g_regex_new("^[Gg][a-zA-Z]*\\s+([^ \\n]+)$",
- G_REGEX_OPTIMIZE, 0, NULL);
- uzbl.comm.set_regex = g_regex_new("^[Ss][a-zA-Z]*\\s+([^ ]+)\\s*=\\s*([^\\n].*)$",
- G_REGEX_OPTIMIZE, 0, NULL);
- uzbl.comm.bind_regex = g_regex_new("^[Bb][a-zA-Z]*\\s+?(.*[^ ])\\s*?=\\s*([a-z][^\\n].+)$",
- G_REGEX_UNGREEDY|G_REGEX_OPTIMIZE, 0, NULL);
- uzbl.comm.act_regex = g_regex_new("^[Aa][a-zA-Z]*\\s+([^ \\n]+)\\s*([^\\n]*)?$",
- G_REGEX_OPTIMIZE, 0, NULL);
-}
-
static gboolean
get_var_value(const gchar *name) {
uzbl_cmdprop *c;
}
static void
-runcmd(WebKitWebView* page, GArray *argv) {
- (void) page;
- parse_cmd_line(argv_idx(argv, 0));
-}
-
-static void
render_html() {
Behaviour *b = &uzbl.behave;
enum {M_CMD, M_HTML};
static void
parse_cmd_line(const char *ctl_line) {
- gchar **tokens = NULL;
Behaviour *b = &uzbl.behave;
size_t len=0;
g_string_append(b->html_buffer, ctl_line);
}
}
- else {
- /* SET command */
- if(ctl_line[0] == 's' || ctl_line[0] == 'S') {
- tokens = g_regex_split(uzbl.comm.set_regex, ctl_line, 0);
- if(tokens[0][0] == 0) {
- gchar* value = parseenv(g_strdup(tokens[2]));
- set_var_value(tokens[1], value);
- g_free(value);
- }
- else
- printf("Error in command: %s\n", tokens[0]);
- }
- /* BIND command */
- else if(ctl_line[0] == 'b' || ctl_line[0] == 'B') {
- tokens = g_regex_split(uzbl.comm.bind_regex, ctl_line, 0);
- if(tokens[0][0] == 0) {
- gchar* value = parseenv(g_strdup(tokens[2]));
- add_binding(tokens[1], value);
- g_free(value);
- }
- else
- printf("Error in command: %s\n", tokens[0]);
- }
- /* ACT command */
- else if(ctl_line[0] == 'A' || ctl_line[0] == 'a') {
- tokens = g_regex_split(uzbl.comm.act_regex, ctl_line, 0);
- if(tokens[0][0] == 0) {
- parse_command(tokens[1], tokens[2]);
- }
- else
- printf("Error in command: %s\n", tokens[0]);
- }
- /* Comments */
- else if( (ctl_line[0] == '#')
- || (ctl_line[0] == ' ')
- || (ctl_line[0] == '\n'))
- ; /* ignore these lines */
- else
- printf("Command not understood (%s)\n", ctl_line);
-
- if(tokens)
- g_strfreev(tokens);
+ else if((ctl_line[0] == '#') /* Comments */
+ || (ctl_line[0] == ' ')
+ || (ctl_line[0] == '\n'))
+ ; /* ignore these lines */
+ else { /* parse a command */
+ gchar *ctlstrip;
+ gchar **tokens = NULL;
+
+ if (ctl_line[strlen(ctl_line) - 1] == '\n') /* strip trailing newline */
+ ctlstrip = g_strndup(ctl_line, strlen(ctl_line) - 1);
+ else ctlstrip = g_strdup(ctl_line);
+
+ tokens = g_strsplit(ctlstrip, " ", 2);
+ parse_command(tokens[0], tokens[1]);
+ g_free(ctlstrip);
+ g_strfreev(tokens);
}
-
- return;
}
static gchar*
static void handle_cookies (SoupSession *session, SoupMessage *msg, gpointer user_data){
(void) session;
(void) user_data;
- if (!uzbl.behave.cookie_handler) return;
+ if (!uzbl.behave.cookie_handler)
+ return;
soup_message_add_header_handler(msg, "got-headers", "Set-Cookie", G_CALLBACK(save_cookies), NULL);
GString *s = g_string_new ("");
if(uzbl.comm.sync_stdout)
soup_message_headers_replace (msg->request_headers, "Cookie", uzbl.comm.sync_stdout);
- //printf("stdout: %s\n", uzbl.comm.sync_stdout); // debugging
if (uzbl.comm.sync_stdout) uzbl.comm.sync_stdout = strfree(uzbl.comm.sync_stdout);
g_string_free(s, TRUE);
uzbl.behave.insert_indicator = g_strdup("I");
uzbl.behave.cmd_indicator = g_strdup("C");
- setup_regex();
setup_scanner();
commands_hash ();
make_var_to_name_hash();