diff options
author | Mason Larobina <mason.larobina@gmail.com> | 2009-09-30 19:44:41 +0800 |
---|---|---|
committer | Mason Larobina <mason.larobina@gmail.com> | 2009-09-30 19:44:41 +0800 |
commit | 0a16d0be71a258e8284e5d4c398f4439757e9ddc (patch) | |
tree | abfc4718377203642587c4500cb544069b8dc181 /examples/data/uzbl/scripts | |
parent | 8aa9fba72378f2db43d5f8b756217e31716efa0b (diff) | |
parent | 69cc7552aa64e0e64f5f4df751871eb9ae663e28 (diff) |
Merge branch 'commandline-editing' of git://github.com/keis/uzbl into experimental
Conflicts:
examples/data/uzbl/scripts/plugins/keycmd.py
Diffstat (limited to 'examples/data/uzbl/scripts')
-rw-r--r-- | examples/data/uzbl/scripts/plugins/keycmd.py | 76 |
1 files changed, 58 insertions, 18 deletions
diff --git a/examples/data/uzbl/scripts/plugins/keycmd.py b/examples/data/uzbl/scripts/plugins/keycmd.py index fcf70c8..96e61b4 100644 --- a/examples/data/uzbl/scripts/plugins/keycmd.py +++ b/examples/data/uzbl/scripts/plugins/keycmd.py @@ -44,14 +44,14 @@ class Keylet(object): def __init__(self): 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 '<Keycmd(%r)>' % self.to_string() @@ -66,12 +66,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 + if self.cmd or self.cmd_s: + self._to_string += '%s%s' % (self.cmd, self.cmd_s) return self._to_string @@ -128,7 +128,7 @@ def clear_keycmd(uzbl): if not k: return - k.cmd = '' + k.cmd = k.cmd_s = '' k._to_string = None if k.modcmd: @@ -156,13 +156,13 @@ def update_event(uzbl, keylet): if 'modcmd_updates' in config and config['modcmd_updates'] != '1': return - uzbl.set('keycmd', keycmd_escape(keycmd)) - elif 'keycmd_events' not in config or config['keycmd_events'] == '1': - keycmd = keylet.cmd + keycmd = keylet.cmd + keylet.cmd_s uzbl.event('KEYCMD_UPDATE', keylet) - if keycmd == keylet.cmd: - uzbl.set('keycmd', keycmd_escape(keycmd)) + if keycmd != (keylet.cmd + keylet.cmd_s): + return + + uzbl.set('keycmd', keycmd_escape(keycmd)) def key_press(uzbl, key): @@ -191,16 +191,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: @@ -211,12 +211,41 @@ 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': if k.cmd: uzbl.event('KEYCMD_EXEC', k) clear_keycmd(uzbl) + elif not k.modcmd and key == 'Escape': + clear_keycmd(uzbl) + + 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) @@ -242,9 +271,9 @@ def key_press(uzbl, key): cmdmod = True k.cmd += key - elif k.cmd: + elif k.cmd or k.cmd_s: cmdmod = True - k.cmd = '' + k.cmd = k.cmd_s = '' if cmdmod: update_event(uzbl, k) @@ -288,12 +317,23 @@ def key_release(uzbl, key): update_event(uzbl, k) +def config_changed(uzbl, key, value): + '''Check for external keycmd updates and update the keylet accordingly.''' + + if key == 'keycmd': + k = get_keylet(uzbl) + if value != k.cmd + k.cmd_s: + k.cmd = value + k.cmd_s = '' + + def init(uzbl): '''Connect handlers to uzbl events.''' connects = {'INSTANCE_START': add_instance, 'INSTANCE_EXIT': del_instance, 'KEY_PRESS': key_press, - 'KEY_RELEASE': key_release} + 'KEY_RELEASE': key_release, + 'CONFIG_CHANGED': config_changed} uzbl.connect_dict(connects) |