Skip to content

Commit

Permalink
[keymaps] Read keymap_usermod.xml for adding or changing key mappings
Browse files Browse the repository at this point in the history
The problem with keymap.usr was that any changes of keymap.xml had to be merged in manually.

Now the user can put ONLY his additions and deletions into keymap_usermod.xml which is read after the selected keymap.

Example:

<keymap>
    <!-- in EMC use 'KEY_1' for adding a file to the playlist -->
    <!-- avoiding addition when accidentally pressing KEY_VIDEO twice -->
    <map context="PluginMovieSelectionActions">
        <key id="KEY_VIDEO" unmap="EMCVIDEOB" />
        <key id="KEY_1"     mapto="EMCVIDEOB" flags="m" />
    </map>
</keymap>
  • Loading branch information
Fischreiher committed Mar 19, 2017
1 parent 89c344d commit 75f91a8
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 10 deletions.
26 changes: 17 additions & 9 deletions keymapparser.py
Expand Up @@ -34,21 +34,29 @@ def parseKeys(context, filename, actionmap, device, keys):
for x in keys.findall("key"):
get_attr = x.attrib.get
mapto = get_attr("mapto")
unmap = get_attr("unmap")
id = get_attr("id")
flags = get_attr("flags")

flag_ascii_to_id = lambda x: {'m':1,'b':2,'r':4,'l':8}[x]
print "XXX",id,unmap,mapto,flags
if unmap:
assert id, "[keymapparser] %s: must specify id in context %s, unmap '%s'" % (filename, context, unmap)
keyid = getKeyId(id)
actionmap.unbindPythonKey(context, keyid, unmap)
else:
assert mapto, "[keymapparser] %s: must specify mapto (or unmap) in context %s, id '%s'" % (filename, context, id)
assert id, "[keymapparser] %s: must specify id in context %s, mapto '%s'" % (filename, context, mapto)
keyid = getKeyId(id)

flags = sum(map(flag_ascii_to_id, flags))
flag_ascii_to_id = lambda x: {'m':1,'b':2,'r':4,'l':8}[x]

assert mapto, "[keymapparser] %s: must specify mapto in context %s, id '%s'" % (filename, context, id)
assert id, "[keymapparser] %s: must specify id in context %s, mapto '%s'" % (filename, context, mapto)
assert flags, "[keymapparser] %s: must specify at least one flag in context %s, id '%s'" % (filename, context, id)
flags = sum(map(flag_ascii_to_id, flags))

keyid = getKeyId(id)
# print "[keymapparser] " + context + "::" + mapto + " -> " + device + "." + hex(keyid)
actionmap.bindKey(filename, device, keyid, flags, context, mapto)
addKeyBinding(filename, keyid, context, mapto, flags)
assert flags, "[keymapparser] %s: must specify at least one flag in context %s, id '%s'" % (filename, context, id)

# print "[keymapparser] " + context + "::" + mapto + " -> " + device + "." + hex(keyid)
actionmap.bindKey(filename, device, keyid, flags, context, mapto)
addKeyBinding(filename, keyid, context, mapto, flags)

def parseTrans(filename, actionmap, device, keys):
for x in keys.findall("toggle"):
Expand Down
1 change: 1 addition & 0 deletions lib/python/Components/UsageConfig.py
Expand Up @@ -598,6 +598,7 @@ def set12VOutput(configElement):

config.usage.keymap = ConfigText(default = eEnv.resolve("${datadir}/enigma2/keymap.xml"))
config.usage.keytrans = ConfigText(default = eEnv.resolve("${datadir}/enigma2/keytranslation.xml"))
config.usage.keymap_usermod = ConfigText(default = eEnv.resolve("${datadir}/enigma2/keymap_usermod.xml"))

config.network = ConfigSubsection()
if SystemInfo["WakeOnLAN"]:
Expand Down
Expand Up @@ -52,7 +52,8 @@ def InitConfig():
'/usr/lib/enigma2/python/Plugins/Extensions/MP3Browser/db',
'/usr/lib/enigma2/python/Plugins/Extensions/MovieBrowser/db',
'/usr/lib/enigma2/python/Plugins/Extensions/TVSpielfilm/db', '/etc/ConfFS',
eEnv.resolve("${datadir}/enigma2/keymap.usr")]\
eEnv.resolve("${datadir}/enigma2/keymap.usr"),
eEnv.resolve("${datadir}/enigma2/keymap_usermod.xml")]\
+eEnv_resolve_multi('/usr/bin/*cam*')\
+eEnv_resolve_multi('/etc/*.emu')\
+eEnv_resolve_multi('/etc/init.d/softcam*')))
Expand Down
2 changes: 2 additions & 0 deletions mytest.py
Expand Up @@ -781,6 +781,8 @@ def runNextScreen(session, screensToRun, *result):
import keymapparser
keymapparser.readKeymap(config.usage.keymap.value)
keymapparser.readKeymap(config.usage.keytrans.value)
if os.path.exists(config.usage.keymap_usermod.value):
keymapparser.readKeymap(config.usage.keymap_usermod.value)

profile("Network")
import Components.Network
Expand Down

0 comments on commit 75f91a8

Please sign in to comment.