Index: release/scripts/ui/space_userpref.py =================================================================== --- release/scripts/ui/space_userpref.py (revision 27964) +++ release/scripts/ui/space_userpref.py (working copy) @@ -172,6 +172,8 @@ op.path = "keymap.py" op = layout.operator("wm.keyconfig_import") op.path = "keymap.py" + op = layout.operator("wm.keyconfig_exportcsv") + op.path = "keymap.csv" elif userpref.active_section == 'ADDONS': op = layout.operator("wm.addon_install") op.path = "*.py" @@ -1970,6 +1972,81 @@ return {'RUNNING_MODAL'} +class WM_OT_keyconfig_exportcsv(bpy.types.Operator): + "Export key mappings to a CSV file" + bl_idname = "wm.keyconfig_exportcsv" + bl_label = "Export Keys as CSV..." + + path = StringProperty(name="File Path", description="File path to write file to") + filename = StringProperty(name="File Name", description="Name of the file") + directory = StringProperty(name="Directory", description="Directory of the file") + filter_folder = BoolProperty(name="Filter folders", description="", default=True, options={'HIDDEN'}) + filter_text = BoolProperty(name="Filter text", description="", default=True, options={'HIDDEN'}) + filter_python = BoolProperty(name="Filter python", description="", default=True, options={'HIDDEN'}) + + def execute(self, context): + if not self.properties.path: + raise Exception("File path not set") + + f = open(self.properties.path, "w") + if not f: + raise Exception("Could not open file") + + wm = context.manager + kc = wm.active_keyconfig + + if kc.name == 'Blender': + name = os.path.splitext(os.path.basename(self.properties.path))[0] + else: + name = kc.name + + + for km in kc.keymaps: + km = km.active() + f.write('"%s"\n\n' % km.name) + for kmi in km.items: + if km.modal: + f.write('"%s","%s"' % (kmi.propvalue, kmi.value)) + else: + f.write('"%s","%s"' % (kmi.idname, kmi.value)) + if kmi.any: + f.write(',"","","",""') + else: + if kmi.shift: + f.write(',"Shift"') + else: + f.write(',""'); + if kmi.ctrl: + f.write(',"Ctrl"') + else: + f.write(',""'); + if kmi.alt: + f.write(',"Alt"') + else: + f.write(',""'); + if kmi.oskey: + f.write(',"OS-key"') + f.write(',"%s"' % (kmi.type)) + if kmi.key_modifier and kmi.key_modifier != 'NONE': + f.write(',"Key Modifier = %s"' % kmi.key_modifier) + else: + f.write(',""') + f.write("\n") + + f.write("\n") + + f.close() + + return {'FINISHED'} + + def invoke(self, context, event): + wm = context.manager + wm.add_fileselect(self) + return {'RUNNING_MODAL'} + + + + class WM_OT_keymap_edit(bpy.types.Operator): "Edit key map" bl_idname = "wm.keymap_edit" @@ -2103,6 +2180,7 @@ WM_OT_addon_links, WM_OT_keyconfig_export, + WM_OT_keyconfig_exportcsv, WM_OT_keyconfig_import, WM_OT_keyconfig_test, WM_OT_keyconfig_remove,