aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rwxr-xr-xexamples/data/uzbl/scripts/event_manager.py1
-rw-r--r--examples/data/uzbl/scripts/plugins/bind.py33
-rw-r--r--examples/data/uzbl/scripts/plugins/keycmd.py71
-rw-r--r--uzbl-core.c118
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;
}