diff options
-rwxr-xr-x | examples/data/uzbl/scripts/event_manager.py | 1 | ||||
-rw-r--r-- | examples/data/uzbl/scripts/plugins/bind.py | 33 | ||||
-rw-r--r-- | examples/data/uzbl/scripts/plugins/keycmd.py | 71 | ||||
-rw-r--r-- | uzbl-core.c | 118 |
4 files changed, 114 insertions, 109 deletions
diff --git a/examples/data/uzbl/scripts/event_manager.py b/examples/data/uzbl/scripts/event_manager.py index b3d5ea2..0bb4876 100755 --- a/examples/data/uzbl/scripts/event_manager.py +++ b/examples/data/uzbl/scripts/event_manager.py @@ -386,6 +386,7 @@ class UzblInstance(object): msg = self._fifo_cmd_queue.pop(0) print "Sending via fifo: %r" % msg h.write("%s\n" % msg) + h.close() if len(self._socket_cmd_queue) and self.uzbl_socket: diff --git a/examples/data/uzbl/scripts/plugins/bind.py b/examples/data/uzbl/scripts/plugins/bind.py index a3618ca..2321679 100644 --- a/examples/data/uzbl/scripts/plugins/bind.py +++ b/examples/data/uzbl/scripts/plugins/bind.py @@ -20,16 +20,16 @@ __export__ = ['bind', 'del_bind', 'del_bind_by_glob', 'get_binds'] _UZBLS = {} # Commonly used regular expressions. -starts_with_mod = re.compile('^<([A-Za-z0-9-_]+|.)>') +starts_with_mod = re.compile('^<([A-Z][A-Za-z0-9-_]+)>') def echo(msg): if config['verbose']: - print "plugin: bind:", msg + print 'bind plugin:', msg def error(msg): - sys.stderr.write("plugin: bind: error: %s" % msg) + sys.stderr.write('bind plugin: error: %s\n' % msg) def ismodbind(glob): @@ -52,7 +52,7 @@ def sort_mods(glob): mods.append(glob[:end]) glob = glob[end:] - return "%s%s" % (''.join(sorted(mods)), glob) + return '%s%s' % (''.join(sorted(mods)), glob) def add_instance(uzbl, *args): @@ -79,7 +79,7 @@ def del_bind(uzbl, bind): binds = get_binds(uzbl) if bind in binds: binds.remove(bind) - uzbl.event("DELETED_BIND", bind) + uzbl.event('DELETED_BIND', bind) return True return False @@ -92,7 +92,7 @@ def del_bind_by_glob(uzbl, glob): for bind in list(binds): if bind.glob == glob: binds.remove(bind) - uzbl.event("DELETED_BIND", bind) + uzbl.event('DELETED_BIND', bind) return True return False @@ -114,7 +114,7 @@ class Bind(object): self.kargs = kargs elif kargs: - raise ArgumentError("cannot supply kargs for uzbl commands") + raise ArgumentError('cannot supply kargs for uzbl commands') elif isiterable(handler): self.commands = handler @@ -142,22 +142,22 @@ class Bind(object): def __repr__(self): - args = ["glob=%r" % self.glob, "bid=%d" % self.bid] + args = ['glob=%r' % self.glob, 'bid=%d' % self.bid] if self.callable: - args.append("function=%r" % self.function) + args.append('function=%r' % self.function) if self.args: - args.append("args=%r" % self.args) + args.append('args=%r' % self.args) if self.kargs: - args.append("kargs=%r" % self.kargs) + args.append('kargs=%r' % self.kargs) else: cmdlen = len(self.commands) cmds = self.commands[0] if cmdlen == 1 else self.commands - args.append("command%s=%r" % ("s" if cmdlen-1 else "", cmds)) + args.append('command%s=%r' % ('s' if cmdlen-1 else '', cmds)) - return "<Bind(%s)>" % ', '.join(args) + return '<Bind(%s)>' % ', '.join(args) def bind(uzbl, glob, handler, *args, **kargs): @@ -179,10 +179,11 @@ def bind(uzbl, glob, handler, *args, **kargs): def parse_bind_event(uzbl, args): '''Parse "event BIND fl* = js follownums.js" commands.''' - if len(args.split('=', 1)) != 2: - error('invalid bind format: %r' % args) + split = map(str.strip, args.split('=', 1)) + if len(split) != 2: + return error('missing "=" in bind definition: %r' % args) - glob, command = map(str.strip, args.split('=', 1)) + glob, command = split bind(uzbl, glob, command) diff --git a/examples/data/uzbl/scripts/plugins/keycmd.py b/examples/data/uzbl/scripts/plugins/keycmd.py index 10c7b5d..67ab6c2 100644 --- a/examples/data/uzbl/scripts/plugins/keycmd.py +++ b/examples/data/uzbl/scripts/plugins/keycmd.py @@ -32,7 +32,7 @@ class Keylet(object): typed.''' def __init__(self): - self.cmd = "" + self.cmd = '' self.held = [] # to_string() string building cache. @@ -43,7 +43,7 @@ class Keylet(object): def __repr__(self): - return "<Keycmd(%r)>" % self.to_string() + return '<Keycmd(%r)>' % self.to_string() def to_string(self): @@ -58,9 +58,9 @@ class Keylet(object): self._to_string = self.cmd else: - self._to_string = ''.join(["<%s>" % key for key in self.held]) + self._to_string = ''.join(['<%s>' % key for key in self.held]) if self.cmd: - self._to_string += "%s" % self.cmd + self._to_string += '%s' % self.cmd return self._to_string @@ -75,7 +75,7 @@ def make_simple(key): '''Make some obscure names for some keys friendlier.''' # Remove left-right discrimination. - if key.endswith("_L") or key.endswith("_R"): + if key.endswith('_L') or key.endswith('_R'): key = key[:-2] if key in _SIMPLEKEYS: @@ -117,15 +117,18 @@ def clear_keycmd(uzbl): if not k: return - k.cmd = "" + k.cmd = '' k._to_string = None if k.modcmd: k.wasmod = True k.modcmd = False - uzbl.get_config()['keycmd'] = "" - uzbl.event("KEYCMD_CLEAR") + config = uzbl.get_config() + if config['keycmd'] != '': + config['keycmd'] = '' + + uzbl.event('KEYCMD_CLEAR') def update_event(uzbl, keylet): @@ -134,12 +137,16 @@ def update_event(uzbl, keylet): config = uzbl.get_config() if keylet.modcmd: - config['keycmd'] = keylet.to_string() - uzbl.event("MODCMD_UPDATE", keylet) + keycmd = keylet.to_string() + uzbl.event('MODCMD_UPDATE', keylet) + if keycmd == keylet.to_string(): + config['keycmd'] = keylet.to_string() else: - config['keycmd'] = keylet.cmd - uzbl.event("KEYCMD_UPDATE", keylet) + keycmd = keylet.cmd + uzbl.event('KEYCMD_UPDATE', keylet) + if keycmd == keylet.cmd: + config['keycmd'] = keylet.cmd def key_press(uzbl, key): @@ -153,13 +160,12 @@ def key_press(uzbl, key): a. BackSpace deletes the last character in the keycmd. b. Return raises a KEYCMD_EXEC event then clears the keycmd. c. Escape clears the keycmd. - d. Normal keys are added to held keys list (I.e. <a><b>+c). 4. If keycmd and held keys are both empty/null and a modkey was pressed set modcmd mode. 5. If in modcmd mode only mod keys are added to the held keys list. 6. Keycmd is updated and events raised if anything is changed.''' - if key.startswith("Shift_"): + if key.startswith('Shift_'): return if len(key) > 1: @@ -175,9 +181,9 @@ def key_press(uzbl, key): k.wasmod = False cmdmod = True - if k.cmd and key == "Space": + if k.cmd and key == 'Space': if k.cmd: - k.cmd += " " + k.cmd += ' ' cmdmod = True elif not k.modcmd and key == 'BackSpace': @@ -190,23 +196,23 @@ def key_press(uzbl, key): cmdmod = True elif not k.modcmd and key == 'Return': - uzbl.event("KEYCMD_EXEC", k) + uzbl.event('KEYCMD_EXEC', k) clear_keycmd(uzbl) elif not k.modcmd and key == 'Escape': clear_keycmd(uzbl) - elif not k.held and not k.cmd: - k.modcmd = True if len(key) > 1 else False + elif not k.held and not k.cmd and len(key) > 1: + k.modcmd = True k.held.append(key) - k.held.sort() cmdmod = True - if not k.modcmd: - k.cmd += key elif k.modcmd: cmdmod = True if len(key) > 1: + if key == 'Shift-Tab' and 'Tab' in k.held: + k.held.remove('Tab') + if key not in k.held: k.held.append(key) k.held.sort() @@ -215,12 +221,8 @@ def key_press(uzbl, key): k.cmd += key else: - cmdmod = True if len(key) == 1: - if key not in k.held: - k.held.append(key) - k.held.sort() - + cmdmod = True k.cmd += key if cmdmod: @@ -245,16 +247,15 @@ def key_release(uzbl, key): return cmdmod = False - if k.modcmd and key in k.held: - uzbl.event("MODCMD_EXEC", k) - k.held.remove(key) - k.held.sort() - clear_keycmd(uzbl) + if key in ['Shift', 'Tab'] and 'Shift-Tab' in k.held: + key = 'Shift-Tab' + + if key in k.held: + if k.modcmd: + uzbl.event('MODCMD_EXEC', k) - elif not k.modcmd and key in k.held: k.held.remove(key) - k.held.sort() - cmdmod = True + clear_keycmd(uzbl) if not k.held and not k.cmd and k.wasmod: k.wasmod = False diff --git a/uzbl-core.c b/uzbl-core.c index 3eabfe7..e0af0e4 100644 --- a/uzbl-core.c +++ b/uzbl-core.c @@ -1057,7 +1057,6 @@ void event(WebKitWebView *page, GArray *argv, GString *result) { (void) page; (void) result; GString *event_name; - gchar *event_details = NULL; gchar **split = g_strsplit(argv_idx(argv, 0), " ", 2); if(split[0]) @@ -1065,25 +1064,17 @@ event(WebKitWebView *page, GArray *argv, GString *result) { else return; - if(split[1]) - event_details = expand(split[1], 0); - - send_event(0, event_details?event_details:"", event_name->str); + send_event(0, split[1]?split[1]:"", event_name->str); g_string_free(event_name, TRUE); - if(event_details) - g_free(event_details); g_strfreev(split); } void print(WebKitWebView *page, GArray *argv, GString *result) { (void) page; (void) result; - gchar* buf; - buf = expand(argv_idx(argv, 0), 0); - g_string_assign(result, buf); - g_free(buf); + g_string_assign(result, argv_idx(argv, 0)); } void @@ -2010,21 +2001,17 @@ set_var_value(const gchar *name, gchar *val) { /* check for the variable type */ if (c->type == TYPE_STR) { - buf = expand(val, 0); + buf = g_strdup(val); g_free(*c->ptr.s); *c->ptr.s = buf; g_string_append_printf(msg, " str %s", buf); } else if(c->type == TYPE_INT) { - buf = expand(val, 0); - *c->ptr.i = (int)strtoul(buf, &endp, 10); - g_free(buf); + *c->ptr.i = (int)strtoul(val, &endp, 10); g_string_append_printf(msg, " int %d", *c->ptr.i); } else if (c->type == TYPE_FLOAT) { - buf = expand(val, 0); - *c->ptr.f = strtod(buf, &endp); - g_free(buf); + *c->ptr.f = strtod(val, &endp); g_string_append_printf(msg, " float %f", *c->ptr.f); } @@ -2047,7 +2034,7 @@ set_var_value(const gchar *name, gchar *val) { c->dump = 0; c->func = NULL; c->writeable = 1; - buf = expand(val, 0); + buf = g_strdup(val); c->ptr.s = malloc(sizeof(char *)); *c->ptr.s = buf; g_hash_table_insert(uzbl.comm.proto_var, @@ -2061,31 +2048,45 @@ set_var_value(const gchar *name, gchar *val) { return TRUE; } -enum {M_CMD, M_HTML}; void parse_cmd_line(const char *ctl_line, GString *result) { size_t len=0; + gchar *ctlstrip = NULL; + gchar *exp_line = NULL; + gchar *work_string = NULL; - if((ctl_line[0] == '#') /* Comments */ - || (ctl_line[0] == ' ') - || (ctl_line[0] == '\n')) - ; /* ignore these lines */ - else { /* parse a command */ - gchar *ctlstrip; - gchar **tokens = NULL; - len = strlen(ctl_line); - - if (ctl_line[len - 1] == '\n') /* strip trailing newline */ - ctlstrip = g_strndup(ctl_line, len - 1); - else ctlstrip = g_strdup(ctl_line); + work_string = g_strdup(ctl_line); - tokens = g_strsplit(ctlstrip, " ", 2); - parse_command(tokens[0], tokens[1], result); - g_free(ctlstrip); - g_strfreev(tokens); + /* strip trailing newline */ + len = strlen(ctl_line); + if (work_string[len - 1] == '\n') + ctlstrip = g_strndup(work_string, len - 1); + else + ctlstrip = g_strdup(work_string); + g_free(work_string); + + if( strcmp(g_strchug(ctlstrip), "") && + strcmp(exp_line = expand(ctlstrip, 0), "") + ) { + /* ignore comments */ + if((exp_line[0] == '#')) + ; + + /* parse a command */ + else { + gchar **tokens = NULL; + + tokens = g_strsplit(exp_line, " ", 2); + parse_command(tokens[0], tokens[1], result); + g_strfreev(tokens); + } + g_free(exp_line); } + + g_free(ctlstrip); } + /*@null@*/ gchar* build_stream_name(int type, const gchar* dir) { State *s = &uzbl.state; @@ -2392,19 +2393,23 @@ create_browser () { g->web_view = WEBKIT_WEB_VIEW (webkit_web_view_new ()); - g_signal_connect (G_OBJECT (g->web_view), "notify::title", G_CALLBACK (title_change_cb), NULL); - g_signal_connect (G_OBJECT (g->web_view), "selection-changed", G_CALLBACK (selection_changed_cb), g->web_view); - g_signal_connect (G_OBJECT (g->web_view), "load-progress-changed", G_CALLBACK (progress_change_cb), g->web_view); - g_signal_connect (G_OBJECT (g->web_view), "load-committed", G_CALLBACK (load_commit_cb), g->web_view); - g_signal_connect (G_OBJECT (g->web_view), "load-started", G_CALLBACK (load_start_cb), g->web_view); - g_signal_connect (G_OBJECT (g->web_view), "load-finished", G_CALLBACK (load_finish_cb), g->web_view); - g_signal_connect (G_OBJECT (g->web_view), "load-error", G_CALLBACK (load_error_cb), g->web_view); - g_signal_connect (G_OBJECT (g->web_view), "hovering-over-link", G_CALLBACK (link_hover_cb), g->web_view); - g_signal_connect (G_OBJECT (g->web_view), "navigation-policy-decision-requested", G_CALLBACK (navigation_decision_cb), g->web_view); - g_signal_connect (G_OBJECT (g->web_view), "new-window-policy-decision-requested", G_CALLBACK (new_window_cb), g->web_view); - g_signal_connect (G_OBJECT (g->web_view), "download-requested", G_CALLBACK (download_cb), g->web_view); - g_signal_connect (G_OBJECT (g->web_view), "create-web-view", G_CALLBACK (create_web_view_cb), g->web_view); - g_signal_connect (G_OBJECT (g->web_view), "mime-type-policy-decision-requested", G_CALLBACK (mime_policy_cb), g->web_view); + g_object_connect((GObject*)g->web_view, + "signal::key-press-event", (GCallback)key_press_cb, NULL, + "signal::key-release-event", (GCallback)key_release_cb, NULL, + "signal::title-changed", (GCallback)title_change_cb, NULL, + "signal::selection-changed", (GCallback)selection_changed_cb, NULL, + "signal::load-progress-changed", (GCallback)progress_change_cb, NULL, + "signal::load-committed", (GCallback)load_commit_cb, NULL, + "signal::load-started", (GCallback)load_start_cb, NULL, + "signal::load-finished", (GCallback)load_finish_cb, NULL, + "signal::load-error", (GCallback)load_error_cb, NULL, + "signal::hovering-over-link", (GCallback)link_hover_cb, NULL, + "signal::navigation-policy-decision-requested", (GCallback)navigation_decision_cb, NULL, + "signal::new-window-policy-decision-requested", (GCallback)new_window_cb, NULL, + "signal::download-requested", (GCallback)download_cb, NULL, + "signal::create-web-view", (GCallback)create_web_view_cb, NULL, + "signal::mime-type-policy-decision-requested", (GCallback)mime_policy_cb, NULL, + NULL); } GtkWidget* @@ -2412,18 +2417,18 @@ create_mainbar () { GUI *g = &uzbl.gui; g->mainbar = gtk_hbox_new (FALSE, 0); - - /* keep a reference to the bar so we can re-pack it at runtime*/ - //sbar_ref = g_object_ref(g->mainbar); - g->mainbar_label = gtk_label_new (""); gtk_label_set_selectable((GtkLabel *)g->mainbar_label, TRUE); gtk_label_set_ellipsize(GTK_LABEL(g->mainbar_label), PANGO_ELLIPSIZE_END); gtk_misc_set_alignment (GTK_MISC(g->mainbar_label), 0, 0); gtk_misc_set_padding (GTK_MISC(g->mainbar_label), 2, 2); gtk_box_pack_start (GTK_BOX (g->mainbar), g->mainbar_label, TRUE, TRUE, 0); - g_signal_connect (G_OBJECT (g->mainbar), "key-press-event", G_CALLBACK (key_press_cb), NULL); - g_signal_connect (G_OBJECT (g->mainbar), "key-release-event", G_CALLBACK (key_release_cb), NULL); + + g_object_connect((GObject*)g->mainbar, + "signal::key-press-event", (GCallback)key_press_cb, NULL, + "signal::key-release-event", (GCallback)key_release_cb, NULL, + NULL); + return g->mainbar; } @@ -2433,9 +2438,6 @@ create_window () { gtk_window_set_default_size (GTK_WINDOW (window), 800, 600); gtk_widget_set_name (window, "Uzbl browser"); g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (destroy_cb), NULL); - g_signal_connect (G_OBJECT (window), "key-press-event", G_CALLBACK (key_press_cb), NULL); - g_signal_connect (G_OBJECT (window), "key-release-event", G_CALLBACK (key_release_cb), NULL); - g_signal_connect (G_OBJECT (window), "configure-event", G_CALLBACK (configure_event_cb), NULL); return window; } |