How to find the right keymap to change on addon registration?

I tried to redefine a shortcut in my addon registration step, but I can't find which one to change. In the user one (bpy.context.window_manager.keyconfigs.user.keymaps['3D View'].keymap_items) there are 3 transform.translate keymaps.

How can my registration code recognise the one in transform modal map and rebind it to a custom key ? How to restore it in the unregister function ?

• See the api reference – gandalf3 Nov 12 '13 at 20:21
• That's exactly what I followed, but there is nothing about modal map there or am I blind ? – matali Nov 12 '13 at 20:55

Are you after one of these, e.g. rotate?

>>> C.window_manager.keyconfigs.user.keymaps['Transform Modal Map'].keymap_items[5].propvalue
'ROTATE'


I'm pretty sure there's only one modal map for all transform operators (and not changable with python).

import bpy
wm = bpy.context.window_manager
keymap = [k for k in wm.keyconfigs.user.keymaps['Transform Modal Map'].keymap_items if k.type == 'G'] #k.propvalue=="TRANSLATE"]
modal_translate = keymap[0] if len(keymap) > 0 else None
print("\n", modal_translate)
for attr in dir(modal_translate):
if not attr.startswith("_"):
val = getattr(modal_translate, attr)
if type(val) in {int, float, str, bool}:
print("\t", attr, "=", val)

"""
<bpy_struct, KeyMapItem("")>
active = True
alt = False
any = False
ctrl = False
id = 5
idname =
is_user_defined = False
is_user_modified = False
key_modifier = NONE
map_type = KEYBOARD
name =
oskey = False
propvalue = TRANSLATE
shift = False
show_expanded = False
type = G
value = PRESS
"""


But note that you can't provide an operator name in modal maps. Only the predefined modal operations can be set (propvalue).

• When I change the shortcut for translate in modal mode under the user preferences, one of the 3 above-mentionned transform.translate go away. So I'm sure I could do it with python by rebinding one of them. problem is which one and how to ensure it works by all users (even those with non-default config). – matali Nov 13 '13 at 20:12
• Not sure how to safely restore a user binding, since blender doesn't call unregister() on quit nor are save_pre / save_post app handlers called (although blender saves to quit.blend). Probably safer to just deactivate an existing keymap and search for it on unregister() to activate again. This way, you don't have to store anything. – CoDEmanX Nov 13 '13 at 21:25
• Entering the code above, i get : >>> modal_translate.type 'WHEELUPMOUSE'. I try to configure G in translate modal mode to cancel blender's translate in my register addon function (to automatically make a GG shortcut) – matali Nov 15 '13 at 7:05
• Updated code to look for 'G' keybinding and print info. Condition can easily be changed. You should probably look for all map_type == KEYBOARD keymap items with propvalue == 'TRANSLATE' and set active=False. Then add your own new keymap item with propvalue='CANCEL'. – CoDEmanX Nov 15 '13 at 10:11