aboutsummaryrefslogtreecommitdiffhomepage
path: root/examples/data/uzbl/scripts
diff options
context:
space:
mode:
authorGravatar keis <keijser@gmail.com>2009-09-22 20:52:23 +0200
committerGravatar keis <keijser@gmail.com>2009-09-29 20:18:24 +0200
commit69cc7552aa64e0e64f5f4df751871eb9ae663e28 (patch)
tree66408bef386aff586b6c37d1c08122e8f9d8c90e /examples/data/uzbl/scripts
parent1048a492a7b5c8772c80c3c6530a89df34556235 (diff)
add simple commandline-ish editing
Diffstat (limited to 'examples/data/uzbl/scripts')
-rw-r--r--examples/data/uzbl/scripts/plugins/keycmd.py96
1 files changed, 69 insertions, 27 deletions
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 "<Keycmd(%r)>" % 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)