From 69cc7552aa64e0e64f5f4df751871eb9ae663e28 Mon Sep 17 00:00:00 2001 From: keis Date: Tue, 22 Sep 2009 20:52:23 +0200 Subject: add simple commandline-ish editing --- examples/data/uzbl/scripts/plugins/keycmd.py | 96 ++++++++++++++++++++-------- 1 file changed, 69 insertions(+), 27 deletions(-) (limited to 'examples/data/uzbl/scripts') diff --git a/examples/data/uzbl/scripts/plugins/keycmd.py b/examples/data/uzbl/scripts/plugins/keycmd.py index 7d835d8..218681c 100644 --- a/examples/data/uzbl/scripts/plugins/keycmd.py +++ b/examples/data/uzbl/scripts/plugins/keycmd.py @@ -32,15 +32,15 @@ class Keylet(object): typed.''' def __init__(self): - self.cmd = "" + self.cmd = '' + self.cmd_s = '' self.held = [] # to_string() string building cache. self._to_string = None self.modcmd = False - self.wasmod = True - + self.wasmod = False def __repr__(self): return "" % self.to_string() @@ -55,12 +55,12 @@ class Keylet(object): return self._to_string if not self.held: - self._to_string = self.cmd + self._to_string = self.cmd + self.cmd_s else: - self._to_string = ''.join(["<%s>" % key for key in self.held]) - if self.cmd: - self._to_string += "%s" % self.cmd + self._to_string = ''.join(['<%s>' % key for key in self.held]) + if self.cmd or self.cmd_s: + self._to_string += '%s%s' % (self.cmd, self.cmd_s) return self._to_string @@ -117,7 +117,7 @@ def clear_keycmd(uzbl): if not k: return - k.cmd = "" + k.cmd = k.cmd_s = '' k._to_string = None if k.modcmd: @@ -135,9 +135,11 @@ def update_event(uzbl, keylet): uzbl.config['keycmd'] = keylet.to_string() uzbl.event("MODCMD_UPDATE", keylet) - else: - uzbl.config['keycmd'] = keylet.cmd - uzbl.event("KEYCMD_UPDATE", keylet) + elif 'keycmd_events' not in uzbl.config or uzbl.config['keycmd_events'] == '1': + keycmd = keylet.cmd + keylet.cmd_s + uzbl.event('KEYCMD_UPDATE', keylet) + if keycmd == (keylet.cmd + keylet.cmd_s): + uzbl.config['keycmd'] = keylet.cmd + keylet.cmd_s def key_press(uzbl, key): @@ -167,16 +169,16 @@ def key_press(uzbl, key): if not k: return + print k.held, k.modcmd, k.wasmod, k.cmd, k.cmd_s cmdmod = False if k.held and k.wasmod: k.modcmd = True k.wasmod = False cmdmod = True - if k.cmd and key == "Space": - if k.cmd: - k.cmd += " " - cmdmod = True + if (k.cmd or k.cmd_s) and key == 'Space': + k.cmd += ' ' + cmdmod = True elif not k.modcmd and key == 'BackSpace': if k.cmd: @@ -187,6 +189,18 @@ def key_press(uzbl, key): else: cmdmod = True + elif not k.modcmd and key == 'Left': + if k.cmd: + k.cmd_s = k.cmd[-1] + k.cmd_s + k.cmd = k.cmd[:-1] + cmdmod = True + + elif not k.modcmd and key == 'Right': + if k.cmd_s: + k.cmd = k.cmd + k.cmd_s[0] + k.cmd_s = k.cmd_s[1:] + cmdmod = True + elif not k.modcmd and key == 'Return': uzbl.event("KEYCMD_EXEC", k) clear_keycmd(uzbl) @@ -194,8 +208,22 @@ def key_press(uzbl, key): 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.modcmd and key == 'Ctrl': + k.held.append(key) + + elif not k.modcmd and k.held and len(key) == 1: + if key == 'w': + cmdmod = True + k.cmd = ' '.join(k.cmd.split(' ')[:-1]) + elif key == 'a': + k.cmd_s = k.cmd + k.cmd_s + k.cmd = '' + elif key == 'e': + k.cmd = k.cmd + k.cmd_s + k.cmd_s = '' + + elif not k.held and not k.cmd and len(key) > 1: + k.modcmd = True k.held.append(key) k.held.sort() cmdmod = True @@ -213,13 +241,14 @@ 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() + if 'keycmd_events' not in uzbl.config or uzbl.config['keycmd_events'] == '1': + if len(key) == 1: + cmdmod = True + k.cmd += key - k.cmd += key + elif k.cmd or k.cmd_s: + cmdmod = True + k.cmd = k.cmd_s = '' if cmdmod: update_event(uzbl, k) @@ -243,11 +272,18 @@ def key_release(uzbl, key): return cmdmod = False - if k.modcmd and key in k.held: - uzbl.event("MODCMD_EXEC", k) + if key in ['Shift', 'Tab'] and 'Shift-Tab' in k.held: + key = 'Shift-Tab' + + elif key in ['Shift', 'Alt'] and 'Meta' in k.held: + key = 'Meta' + + if key in k.held: + if k.modcmd: + uzbl.event('MODCMD_EXEC', k) + clear_keycmd(uzbl) + k.held.remove(key) - k.held.sort() - clear_keycmd(uzbl) elif not k.modcmd and key in k.held: k.held.remove(key) @@ -260,6 +296,11 @@ def key_release(uzbl, key): if cmdmod: update_event(uzbl, k) +def config_changed(uzbl, k, v): + if k == 'keycmd': + keylet = get_keylet(uzbl) + if v != keylet.cmd + keylet.cmd_s: + keylet.cmd,keylet.cmd_s = v,'' def init(uzbl): '''Connect handlers to uzbl events.''' @@ -268,3 +309,4 @@ def init(uzbl): uzbl.connect('INSTANCE_STOP', del_instance) uzbl.connect('KEY_PRESS', key_press) uzbl.connect('KEY_RELEASE', key_release) + uzbl.connect('CONFIG_CHANGED', config_changed) -- cgit v1.2.3