aboutsummaryrefslogtreecommitdiffhomepage
path: root/examples
diff options
context:
space:
mode:
authorGravatar Brendan Taylor <whateley@gmail.com>2009-10-25 14:00:49 -0600
committerGravatar Brendan Taylor <whateley@gmail.com>2009-10-25 14:00:49 -0600
commit38b9b08b1e16c9f35801908722bfa1c5f68f3c7e (patch)
treed59c2866c61bd5ccc77545de8c9971946ae0ffa0 /examples
parentd8264b1ed147aa397f4f89450c6bd980aae0503c (diff)
parent3e0fb515663178f9a06a0928fd9ddab13d702e20 (diff)
Merge remote branch 'robm/experimental'
Diffstat (limited to 'examples')
-rw-r--r--examples/config/uzbl/config14
-rw-r--r--examples/data/uzbl/plugins/bind.py4
-rw-r--r--examples/data/uzbl/plugins/keycmd.py74
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)