diff options
author | Brendan Taylor <whateley@gmail.com> | 2009-10-25 14:00:49 -0600 |
---|---|---|
committer | Brendan Taylor <whateley@gmail.com> | 2009-10-25 14:00:49 -0600 |
commit | 38b9b08b1e16c9f35801908722bfa1c5f68f3c7e (patch) | |
tree | d59c2866c61bd5ccc77545de8c9971946ae0ffa0 /examples | |
parent | d8264b1ed147aa397f4f89450c6bd980aae0503c (diff) | |
parent | 3e0fb515663178f9a06a0928fd9ddab13d702e20 (diff) |
Merge remote branch 'robm/experimental'
Diffstat (limited to 'examples')
-rw-r--r-- | examples/config/uzbl/config | 14 | ||||
-rw-r--r-- | examples/data/uzbl/plugins/bind.py | 4 | ||||
-rw-r--r-- | examples/data/uzbl/plugins/keycmd.py | 74 |
3 files changed, 62 insertions, 30 deletions
diff --git a/examples/config/uzbl/config b/examples/config/uzbl/config index 52de5e5..07bf69a 100644 --- a/examples/config/uzbl/config +++ b/examples/config/uzbl/config @@ -13,6 +13,8 @@ set toggle_modes = request TOGGLE_MODES set on_event = request ON_EVENT # request PROGRESS_CONFIG <key> = <value> set progress = request PROGRESS_CONFIG +# request MODMAP From To +set modmap = request MODMAP set set_mode = set mode = set set_status = set status_message = @@ -42,8 +44,8 @@ set new_window = sh 'uzbl-browser -u $8' # equivalent to the default beh @on_event LOAD_FINISH @set_status <span foreground="gold">done</span> @on_event LOAD_FINISH spawn @scripts_dir/history.sh -# Generate a FORM_ACTIVE event if an editable -# element on the loaded site has initial focus +# Generate a FORM_ACTIVE event if an editable +# element on the loaded site has initial focus @on_event LOAD_FINISH js if(document.activeElement.type == 'text') {Uzbl.run("event FORM_ACTIVE");} # Switch to insert mode if a (editable) html form is clicked @@ -98,6 +100,14 @@ set fifo_dir = /tmp set socket_dir = /tmp +# === Binding modmaps ======================================================== + +#modmap from to +@modmap Control Ctrl +@modmap ISO_Left_Tab Shift-Tab +@modmap space Space + + # === Keyboard bindings ====================================================== # With this command you can enter in any command at runtime when prefixed with diff --git a/examples/data/uzbl/plugins/bind.py b/examples/data/uzbl/plugins/bind.py index fe017eb..8c932be 100644 --- a/examples/data/uzbl/plugins/bind.py +++ b/examples/data/uzbl/plugins/bind.py @@ -24,7 +24,7 @@ starts_with_mod = re.compile('^<([A-Z][A-Za-z0-9-_]*)>') find_prompts = re.compile('<([^:>]*):>').split # For accessing a bind glob stack. -MOD_CMD, ON_EXEC, HAS_ARGS, GLOB = range(4) +MOD_CMD, ON_EXEC, HAS_ARGS, GLOB, MORE = range(5) class BindParseError(Exception): @@ -188,7 +188,7 @@ class Bind(object): stack.append((mod_cmd, on_exec, has_args, glob, index)) self.stack = list(reversed(stack)) - self.is_global = len(self.stack) == 1 + self.is_global = (len(self.stack) == 1 and self.stack[0][MOD_CMD]) def __getitem__(self, depth): diff --git a/examples/data/uzbl/plugins/keycmd.py b/examples/data/uzbl/plugins/keycmd.py index 109bb38..311684b 100644 --- a/examples/data/uzbl/plugins/keycmd.py +++ b/examples/data/uzbl/plugins/keycmd.py @@ -2,18 +2,11 @@ import re # Map these functions/variables in the plugins namespace to the uzbl object. __export__ = ['clear_keycmd', 'set_keycmd', 'set_cursor_pos', 'get_keylet', - 'clear_current', 'clear_modcmd'] + 'clear_current', 'clear_modcmd', 'add_modmap'] # Hold the keylets. UZBLS = {} -# Simple key names map. -SIMPLEKEYS = { - 'Control': 'Ctrl', - 'ISO_Left_Tab': 'Shift-Tab', - 'space':'Space', -} - # Keycmd format which includes the markup for the cursor. KEYCMD_FORMAT = "%s<span @cursor_style>%s</span>%s" @@ -46,6 +39,9 @@ class Keylet(object): self.keycmd = '' self.cursor = 0 + # Key modmaps. + self.modmap = {} + # Keylet string repr cache. self._repr_cache = None @@ -65,6 +61,20 @@ class Keylet(object): return ''.join(['<%s>' % key for key in self.held]) + self.modcmd + def key_modmap(self, key): + '''Make some obscure names for some keys friendlier.''' + + if key in self.modmap: + return self.modmap[key] + + elif key.endswith('_L') or key.endswith('_R'): + # Remove left-right discrimination and try again. + return self.key_modmap(key[:-2]) + + else: + return key + + def __repr__(self): '''Return a string representation of the keylet.''' @@ -85,17 +95,30 @@ class Keylet(object): return self._repr_cache -def make_simple(key): - '''Make some obscure names for some keys friendlier.''' +def add_modmap(uzbl, key, map=None): + '''Add modmaps.''' - # Remove left-right discrimination. - if key.endswith('_L') or key.endswith('_R'): - key = key[:-2] + keylet = get_keylet(uzbl) + if not map: + if key in keylet.modmap: + map = keylet.modmap[key] + del keylet.modmap[key] + uzbl.event("DEL_MODMAP", key, map) + + else: + keylet.modmap[key] = map + uzbl.event("NEW_MODMAP", key, map) - if key in SIMPLEKEYS: - key = SIMPLEKEYS[key] - return key +def modmap_parse(uzbl, map): + '''Parse a modmap definiton.''' + + split = [s.strip() for s in map.split(' ') if s.split()] + + if not split or len(split) > 2: + raise Exception('Invalid modmap arugments: %r' % map) + + add_modmap(uzbl, *split) def add_instance(uzbl, *args): @@ -229,10 +252,12 @@ def key_press(uzbl, key): if key.startswith('Shift_'): return - if len(key) > 1: - key = make_simple(key) - k = get_keylet(uzbl) + key = k.key_modmap(key.strip()) + print 'KEY', key + if key.startswith("ISO_"): + return + if key == 'Space' and not k.held and k.keycmd: k.keycmd = inject_char(k.keycmd, k.cursor, ' ') k.cursor += 1 @@ -271,10 +296,9 @@ def key_release(uzbl, key): 3. Check if any modkey is held, if so set modcmd mode. 4. Update the keycmd uzbl variable if anything changed.''' - if len(key) > 1: - key = make_simple(key) - k = get_keylet(uzbl) + key = k.key_modmap(key) + if key in ['Shift', 'Tab'] and 'Shift-Tab' in k.held: key = 'Shift-Tab' @@ -286,9 +310,6 @@ def key_release(uzbl, key): uzbl.event('MODCMD_EXEC', k) k.held.remove(key) - #k.is_modcmd = False - #k.modcmd = '' - #update_event(uzbl, k) clear_modcmd(uzbl) @@ -390,6 +411,7 @@ def init(uzbl): 'KEYCMD_EXEC_CURRENT': keycmd_exec_current, 'SET_CURSOR_POS': set_cursor_pos, 'FOCUS_LOST': focus_changed, - 'FOCUS_GAINED': focus_changed} + 'FOCUS_GAINED': focus_changed, + 'MODMAP': modmap_parse} uzbl.connect_dict(connects) |