From 916446e83f63e0789fc1f5db4e6535340ef0be16 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 20 Nov 2018 11:36:44 +1100 Subject: [PATCH] Cleanup: move keymap hierarchy into own file --- .../bl_i18n_utils/bl_extract_messages.py | 4 +- .../modules/bl_keymap_utils/__init__.py | 1 + .../bl_keymap_utils/keymap_hierarchy.py | 206 ++++++++++++++++++ .../modules/bpy_extras/keyconfig_utils.py | 187 +--------------- release/scripts/modules/rna_keymap_ui.py | 4 +- tests/python/bl_keymap_completeness.py | 15 +- 6 files changed, 223 insertions(+), 194 deletions(-) create mode 100644 release/scripts/modules/bl_keymap_utils/keymap_hierarchy.py diff --git a/release/scripts/modules/bl_i18n_utils/bl_extract_messages.py b/release/scripts/modules/bl_i18n_utils/bl_extract_messages.py index fada1255e8b..f22675b481f 100644 --- a/release/scripts/modules/bl_i18n_utils/bl_extract_messages.py +++ b/release/scripts/modules/bl_i18n_utils/bl_extract_messages.py @@ -437,8 +437,8 @@ def dump_rna_messages(msgs, reports, settings, verbose=False): reports, check_ctxt_rna, settings) # And parse keymaps! - from bpy_extras.keyconfig_utils import km_hierarchy - walk_keymap_hierarchy(km_hierarchy(), "KM_HIERARCHY") + from bl_keymap_utils import keymap_hierarchy + walk_keymap_hierarchy(keymap_hierarchy.generate(), "KM_HIERARCHY") ##### Python source code ##### diff --git a/release/scripts/modules/bl_keymap_utils/__init__.py b/release/scripts/modules/bl_keymap_utils/__init__.py index 6c1a7d2cd50..1c4a64081f8 100644 --- a/release/scripts/modules/bl_keymap_utils/__init__.py +++ b/release/scripts/modules/bl_keymap_utils/__init__.py @@ -21,4 +21,5 @@ __all__ = ( "io", "keymap_from_toolbar", + "keymap_hierarchy", ) diff --git a/release/scripts/modules/bl_keymap_utils/keymap_hierarchy.py b/release/scripts/modules/bl_keymap_utils/keymap_hierarchy.py new file mode 100644 index 00000000000..a769bb34d1e --- /dev/null +++ b/release/scripts/modules/bl_keymap_utils/keymap_hierarchy.py @@ -0,0 +1,206 @@ +# ##### BEGIN GPL LICENSE BLOCK ##### +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# ##### END GPL LICENSE BLOCK ##### + +# + +__all__ = ( + "generate", +) + +def _km_expand_from_toolsystem(space_type, context_mode): + def _fn(): + from bl_ui.space_toolsystem_common import ToolSelectPanelHelper + for cls in ToolSelectPanelHelper.__subclasses__(): + if cls.bl_space_type == space_type: + return cls.keymap_ui_hierarchy(context_mode) + raise Exception("keymap not found") + return _fn + + +def _km_hierarchy_iter_recursive(items): + for sub in items: + if callable(sub): + yield from sub() + else: + yield (*sub[:3], list(_km_hierarchy_iter_recursive(sub[3]))) + + +def generate(): + return list(_km_hierarchy_iter_recursive(_km_hierarchy)) + + +# bpy.type.KeyMap: (km.name, km.space_type, km.region_type, [...]) + +# ('Script', 'EMPTY', 'WINDOW', []), + + +# Access via 'km_hierarchy'. +_km_hierarchy = [ + ('Window', 'EMPTY', 'WINDOW', []), # file save, window change, exit + ('Screen', 'EMPTY', 'WINDOW', [ # full screen, undo, screenshot + ('Screen Editing', 'EMPTY', 'WINDOW', []), # re-sizing, action corners + ('Header', 'EMPTY', 'WINDOW', []), # header stuff (per region) + ]), + + ('View2D', 'EMPTY', 'WINDOW', []), # view 2d navigation (per region) + ('View2D Buttons List', 'EMPTY', 'WINDOW', []), # view 2d with buttons navigation + + ('User Interface', 'EMPTY', 'WINDOW', []), + + ('3D View', 'VIEW_3D', 'WINDOW', [ # view 3d navigation and generic stuff (select, transform) + ('Object Mode', 'EMPTY', 'WINDOW', [ + _km_expand_from_toolsystem('VIEW_3D', 'OBJECT'), + ]), + ('Mesh', 'EMPTY', 'WINDOW', [ + _km_expand_from_toolsystem('VIEW_3D', 'EDIT_MESH'), + ]), + ('Curve', 'EMPTY', 'WINDOW', [ + _km_expand_from_toolsystem('VIEW_3D', 'EDIT_CURVE'), + ]), + ('Armature', 'EMPTY', 'WINDOW', [ + _km_expand_from_toolsystem('VIEW_3D', 'EDIT_ARMATURE'), + ]), + ('Metaball', 'EMPTY', 'WINDOW', [ + _km_expand_from_toolsystem('VIEW_3D', 'EDIT_METABALL'), + ]), + ('Lattice', 'EMPTY', 'WINDOW', [ + _km_expand_from_toolsystem('VIEW_3D', 'EDIT_LATTICE'), + ]), + ('Font', 'EMPTY', 'WINDOW', [ + _km_expand_from_toolsystem('VIEW_3D', 'EDIT_TEXT'), + ]), + + ('Pose', 'EMPTY', 'WINDOW', [ + _km_expand_from_toolsystem('VIEW_3D', 'POSE'), + ]), + + ('Vertex Paint', 'EMPTY', 'WINDOW', [ + _km_expand_from_toolsystem('VIEW_3D', 'PAINT_VERTEX'), + ]), + ('Weight Paint', 'EMPTY', 'WINDOW', [ + _km_expand_from_toolsystem('VIEW_3D', 'PAINT_WEIGHT'), + ]), + ('Weight Paint Vertex Selection', 'EMPTY', 'WINDOW', []), + ('Face Mask', 'EMPTY', 'WINDOW', []), + # image and view3d + ('Image Paint', 'EMPTY', 'WINDOW', [ + _km_expand_from_toolsystem('VIEW_3D', 'PAINT_TEXTURE'), + ]), + ('Sculpt', 'EMPTY', 'WINDOW', [ + _km_expand_from_toolsystem('VIEW_3D', 'SCULPT'), + ]), + + ('Particle', 'EMPTY', 'WINDOW', [ + _km_expand_from_toolsystem('VIEW_3D', 'PARTICLE'), + ]), + + ('Knife Tool Modal Map', 'EMPTY', 'WINDOW', []), + ('Custom Normals Modal Map', 'EMPTY', 'WINDOW', []), + ('Paint Stroke Modal', 'EMPTY', 'WINDOW', []), + ('Paint Curve', 'EMPTY', 'WINDOW', []), + + ('Object Non-modal', 'EMPTY', 'WINDOW', []), # mode change + + ('View3D Walk Modal', 'EMPTY', 'WINDOW', []), + ('View3D Fly Modal', 'EMPTY', 'WINDOW', []), + ('View3D Rotate Modal', 'EMPTY', 'WINDOW', []), + ('View3D Move Modal', 'EMPTY', 'WINDOW', []), + ('View3D Zoom Modal', 'EMPTY', 'WINDOW', []), + ('View3D Dolly Modal', 'EMPTY', 'WINDOW', []), + + # toolbar and properties + ('3D View Generic', 'VIEW_3D', 'WINDOW', [ + _km_expand_from_toolsystem('VIEW_3D', None), + ]), + ]), + + ('Graph Editor', 'GRAPH_EDITOR', 'WINDOW', [ + ('Graph Editor Generic', 'GRAPH_EDITOR', 'WINDOW', []), + ]), + ('Dopesheet', 'DOPESHEET_EDITOR', 'WINDOW', [ + ('Dopesheet Generic', 'DOPESHEET_EDITOR', 'WINDOW', []), + ]), + ('NLA Editor', 'NLA_EDITOR', 'WINDOW', [ + ('NLA Channels', 'NLA_EDITOR', 'WINDOW', []), + ('NLA Generic', 'NLA_EDITOR', 'WINDOW', []), + ]), + ('Timeline', 'TIMELINE', 'WINDOW', []), + + ('Image', 'IMAGE_EDITOR', 'WINDOW', [ + ('UV Editor', 'EMPTY', 'WINDOW', []), # image (reverse order, UVEdit before Image) + ('Image Paint', 'EMPTY', 'WINDOW', []), # image and view3d + ('UV Sculpt', 'EMPTY', 'WINDOW', []), + ('Image Generic', 'IMAGE_EDITOR', 'WINDOW', [ + _km_expand_from_toolsystem('IMAGE_EDITOR', None), + ]), + ]), + + ('Outliner', 'OUTLINER', 'WINDOW', []), + + ('Node Editor', 'NODE_EDITOR', 'WINDOW', [ + ('Node Generic', 'NODE_EDITOR', 'WINDOW', []), + ]), + ('Sequencer', 'SEQUENCE_EDITOR', 'WINDOW', [ + ('SequencerCommon', 'SEQUENCE_EDITOR', 'WINDOW', []), + ('SequencerPreview', 'SEQUENCE_EDITOR', 'WINDOW', []), + ]), + + ('File Browser', 'FILE_BROWSER', 'WINDOW', [ + ('File Browser Main', 'FILE_BROWSER', 'WINDOW', []), + ('File Browser Buttons', 'FILE_BROWSER', 'WINDOW', []), + ]), + + ('Info', 'INFO', 'WINDOW', []), + + ('Property Editor', 'PROPERTIES', 'WINDOW', []), # align context menu + + ('Text', 'TEXT_EDITOR', 'WINDOW', [ + ('Text Generic', 'TEXT_EDITOR', 'WINDOW', []), + ]), + ('Console', 'CONSOLE', 'WINDOW', []), + ('Clip', 'CLIP_EDITOR', 'WINDOW', [ + ('Clip Editor', 'CLIP_EDITOR', 'WINDOW', []), + ('Clip Graph Editor', 'CLIP_EDITOR', 'WINDOW', []), + ('Clip Dopesheet Editor', 'CLIP_EDITOR', 'WINDOW', []), + ]), + + ('Grease Pencil', 'EMPTY', 'WINDOW', [ # grease pencil stuff (per region) + ('Grease Pencil Stroke Edit Mode', 'EMPTY', 'WINDOW', []), + ('Grease Pencil Stroke Paint (Draw brush)', 'EMPTY', 'WINDOW', []), + ('Grease Pencil Stroke Paint (Fill)', 'EMPTY', 'WINDOW', []), + ('Grease Pencil Stroke Paint (Erase)', 'EMPTY', 'WINDOW', []), + ('Grease Pencil Stroke Paint Mode', 'EMPTY', 'WINDOW', []), + ('Grease Pencil Stroke Sculpt Mode', 'EMPTY', 'WINDOW', []), + ('Grease Pencil Stroke Weight Mode', 'EMPTY', 'WINDOW', []), + ]), + ('Mask Editing', 'EMPTY', 'WINDOW', []), + ('Frames', 'EMPTY', 'WINDOW', []), # frame navigation (per region) + ('Markers', 'EMPTY', 'WINDOW', []), # markers (per region) + ('Animation', 'EMPTY', 'WINDOW', []), # frame change on click, preview range (per region) + ('Animation Channels', 'EMPTY', 'WINDOW', []), + + ('View3D Gesture Circle', 'EMPTY', 'WINDOW', []), + ('Gesture Straight Line', 'EMPTY', 'WINDOW', []), + ('Gesture Zoom Border', 'EMPTY', 'WINDOW', []), + ('Gesture Box', 'EMPTY', 'WINDOW', []), + + ('Standard Modal Map', 'EMPTY', 'WINDOW', []), + ('Transform Modal Map', 'EMPTY', 'WINDOW', []), + ('Eyedropper Modal Map', 'EMPTY', 'WINDOW', []), + ('Eyedropper ColorBand PointSampling Map', 'EMPTY', 'WINDOW', []), +] diff --git a/release/scripts/modules/bpy_extras/keyconfig_utils.py b/release/scripts/modules/bpy_extras/keyconfig_utils.py index 1c5671d737e..b7342adcee7 100644 --- a/release/scripts/modules/bpy_extras/keyconfig_utils.py +++ b/release/scripts/modules/bpy_extras/keyconfig_utils.py @@ -19,190 +19,6 @@ # -def _km_expand_from_toolsystem(space_type, context_mode): - def _fn(): - from bl_ui.space_toolsystem_common import ToolSelectPanelHelper - for cls in ToolSelectPanelHelper.__subclasses__(): - if cls.bl_space_type == space_type: - return cls.keymap_ui_hierarchy(context_mode) - raise Exception("keymap not found") - return _fn - - -def _km_hierarchy_iter_recursive(items): - for sub in items: - if callable(sub): - yield from sub() - else: - yield (*sub[:3], list(_km_hierarchy_iter_recursive(sub[3]))) - - -def km_hierarchy(): - return list(_km_hierarchy_iter_recursive(_km_hierarchy)) - - -# bpy.type.KeyMap: (km.name, km.space_type, km.region_type, [...]) - -# ('Script', 'EMPTY', 'WINDOW', []), - - -# Access via 'km_hierarchy'. -_km_hierarchy = [ - ('Window', 'EMPTY', 'WINDOW', []), # file save, window change, exit - ('Screen', 'EMPTY', 'WINDOW', [ # full screen, undo, screenshot - ('Screen Editing', 'EMPTY', 'WINDOW', []), # re-sizing, action corners - ('Header', 'EMPTY', 'WINDOW', []), # header stuff (per region) - ]), - - ('View2D', 'EMPTY', 'WINDOW', []), # view 2d navigation (per region) - ('View2D Buttons List', 'EMPTY', 'WINDOW', []), # view 2d with buttons navigation - - ('User Interface', 'EMPTY', 'WINDOW', []), - - ('3D View', 'VIEW_3D', 'WINDOW', [ # view 3d navigation and generic stuff (select, transform) - ('Object Mode', 'EMPTY', 'WINDOW', [ - _km_expand_from_toolsystem('VIEW_3D', 'OBJECT'), - ]), - ('Mesh', 'EMPTY', 'WINDOW', [ - _km_expand_from_toolsystem('VIEW_3D', 'EDIT_MESH'), - ]), - ('Curve', 'EMPTY', 'WINDOW', [ - _km_expand_from_toolsystem('VIEW_3D', 'EDIT_CURVE'), - ]), - ('Armature', 'EMPTY', 'WINDOW', [ - _km_expand_from_toolsystem('VIEW_3D', 'EDIT_ARMATURE'), - ]), - ('Metaball', 'EMPTY', 'WINDOW', [ - _km_expand_from_toolsystem('VIEW_3D', 'EDIT_METABALL'), - ]), - ('Lattice', 'EMPTY', 'WINDOW', [ - _km_expand_from_toolsystem('VIEW_3D', 'EDIT_LATTICE'), - ]), - ('Font', 'EMPTY', 'WINDOW', [ - _km_expand_from_toolsystem('VIEW_3D', 'EDIT_TEXT'), - ]), - - ('Pose', 'EMPTY', 'WINDOW', [ - _km_expand_from_toolsystem('VIEW_3D', 'POSE'), - ]), - - ('Vertex Paint', 'EMPTY', 'WINDOW', [ - _km_expand_from_toolsystem('VIEW_3D', 'PAINT_VERTEX'), - ]), - ('Weight Paint', 'EMPTY', 'WINDOW', [ - _km_expand_from_toolsystem('VIEW_3D', 'PAINT_WEIGHT'), - ]), - ('Weight Paint Vertex Selection', 'EMPTY', 'WINDOW', []), - ('Face Mask', 'EMPTY', 'WINDOW', []), - # image and view3d - ('Image Paint', 'EMPTY', 'WINDOW', [ - _km_expand_from_toolsystem('VIEW_3D', 'PAINT_TEXTURE'), - ]), - ('Sculpt', 'EMPTY', 'WINDOW', [ - _km_expand_from_toolsystem('VIEW_3D', 'SCULPT'), - ]), - - ('Particle', 'EMPTY', 'WINDOW', [ - _km_expand_from_toolsystem('VIEW_3D', 'PARTICLE'), - ]), - - ('Knife Tool Modal Map', 'EMPTY', 'WINDOW', []), - ('Custom Normals Modal Map', 'EMPTY', 'WINDOW', []), - ('Paint Stroke Modal', 'EMPTY', 'WINDOW', []), - ('Paint Curve', 'EMPTY', 'WINDOW', []), - - ('Object Non-modal', 'EMPTY', 'WINDOW', []), # mode change - - ('View3D Walk Modal', 'EMPTY', 'WINDOW', []), - ('View3D Fly Modal', 'EMPTY', 'WINDOW', []), - ('View3D Rotate Modal', 'EMPTY', 'WINDOW', []), - ('View3D Move Modal', 'EMPTY', 'WINDOW', []), - ('View3D Zoom Modal', 'EMPTY', 'WINDOW', []), - ('View3D Dolly Modal', 'EMPTY', 'WINDOW', []), - - # toolbar and properties - ('3D View Generic', 'VIEW_3D', 'WINDOW', [ - _km_expand_from_toolsystem('VIEW_3D', None), - ]), - ]), - - ('Graph Editor', 'GRAPH_EDITOR', 'WINDOW', [ - ('Graph Editor Generic', 'GRAPH_EDITOR', 'WINDOW', []), - ]), - ('Dopesheet', 'DOPESHEET_EDITOR', 'WINDOW', [ - ('Dopesheet Generic', 'DOPESHEET_EDITOR', 'WINDOW', []), - ]), - ('NLA Editor', 'NLA_EDITOR', 'WINDOW', [ - ('NLA Channels', 'NLA_EDITOR', 'WINDOW', []), - ('NLA Generic', 'NLA_EDITOR', 'WINDOW', []), - ]), - ('Timeline', 'TIMELINE', 'WINDOW', []), - - ('Image', 'IMAGE_EDITOR', 'WINDOW', [ - ('UV Editor', 'EMPTY', 'WINDOW', []), # image (reverse order, UVEdit before Image) - ('Image Paint', 'EMPTY', 'WINDOW', []), # image and view3d - ('UV Sculpt', 'EMPTY', 'WINDOW', []), - ('Image Generic', 'IMAGE_EDITOR', 'WINDOW', [ - _km_expand_from_toolsystem('IMAGE_EDITOR', None), - ]), - ]), - - ('Outliner', 'OUTLINER', 'WINDOW', []), - - ('Node Editor', 'NODE_EDITOR', 'WINDOW', [ - ('Node Generic', 'NODE_EDITOR', 'WINDOW', []), - ]), - ('Sequencer', 'SEQUENCE_EDITOR', 'WINDOW', [ - ('SequencerCommon', 'SEQUENCE_EDITOR', 'WINDOW', []), - ('SequencerPreview', 'SEQUENCE_EDITOR', 'WINDOW', []), - ]), - - ('File Browser', 'FILE_BROWSER', 'WINDOW', [ - ('File Browser Main', 'FILE_BROWSER', 'WINDOW', []), - ('File Browser Buttons', 'FILE_BROWSER', 'WINDOW', []), - ]), - - ('Info', 'INFO', 'WINDOW', []), - - ('Property Editor', 'PROPERTIES', 'WINDOW', []), # align context menu - - ('Text', 'TEXT_EDITOR', 'WINDOW', [ - ('Text Generic', 'TEXT_EDITOR', 'WINDOW', []), - ]), - ('Console', 'CONSOLE', 'WINDOW', []), - ('Clip', 'CLIP_EDITOR', 'WINDOW', [ - ('Clip Editor', 'CLIP_EDITOR', 'WINDOW', []), - ('Clip Graph Editor', 'CLIP_EDITOR', 'WINDOW', []), - ('Clip Dopesheet Editor', 'CLIP_EDITOR', 'WINDOW', []), - ]), - - ('Grease Pencil', 'EMPTY', 'WINDOW', [ # grease pencil stuff (per region) - ('Grease Pencil Stroke Edit Mode', 'EMPTY', 'WINDOW', []), - ('Grease Pencil Stroke Paint (Draw brush)', 'EMPTY', 'WINDOW', []), - ('Grease Pencil Stroke Paint (Fill)', 'EMPTY', 'WINDOW', []), - ('Grease Pencil Stroke Paint (Erase)', 'EMPTY', 'WINDOW', []), - ('Grease Pencil Stroke Paint Mode', 'EMPTY', 'WINDOW', []), - ('Grease Pencil Stroke Sculpt Mode', 'EMPTY', 'WINDOW', []), - ('Grease Pencil Stroke Weight Mode', 'EMPTY', 'WINDOW', []), - ]), - ('Mask Editing', 'EMPTY', 'WINDOW', []), - ('Frames', 'EMPTY', 'WINDOW', []), # frame navigation (per region) - ('Markers', 'EMPTY', 'WINDOW', []), # markers (per region) - ('Animation', 'EMPTY', 'WINDOW', []), # frame change on click, preview range (per region) - ('Animation Channels', 'EMPTY', 'WINDOW', []), - - ('View3D Gesture Circle', 'EMPTY', 'WINDOW', []), - ('Gesture Straight Line', 'EMPTY', 'WINDOW', []), - ('Gesture Zoom Border', 'EMPTY', 'WINDOW', []), - ('Gesture Box', 'EMPTY', 'WINDOW', []), - - ('Standard Modal Map', 'EMPTY', 'WINDOW', []), - ('Transform Modal Map', 'EMPTY', 'WINDOW', []), - ('Eyedropper Modal Map', 'EMPTY', 'WINDOW', []), - ('Eyedropper ColorBand PointSampling Map', 'EMPTY', 'WINDOW', []), -] - - # ----------------------------------------------------------------------------- # Add-on helpers to properly (un)register their own keymaps. @@ -330,8 +146,9 @@ def keyconfig_test(kc): # ------------------------------------------------------------------------- # Function body + from bl_keymap_utils import keymap_hierarchy result = False - for entry in km_hierarchy(): + for entry in keymap_hierarchy.generate(): if testEntry(kc, entry): result = True return result diff --git a/release/scripts/modules/rna_keymap_ui.py b/release/scripts/modules/rna_keymap_ui.py index 2247d18ae72..a1afca914aa 100644 --- a/release/scripts/modules/rna_keymap_ui.py +++ b/release/scripts/modules/rna_keymap_ui.py @@ -355,8 +355,8 @@ def draw_filtered(display_keymaps, filter_type, filter_text, layout): def draw_hierarchy(display_keymaps, layout): - from bpy_extras import keyconfig_utils - for entry in keyconfig_utils.km_hierarchy(): + from bl_keymap_utils import keymap_hierarchy + for entry in keymap_hierarchy.generate(): draw_entry(display_keymaps, entry, layout) diff --git a/tests/python/bl_keymap_completeness.py b/tests/python/bl_keymap_completeness.py index 0edee3b02f0..19541b355e2 100644 --- a/tests/python/bl_keymap_completeness.py +++ b/tests/python/bl_keymap_completeness.py @@ -18,10 +18,15 @@ # -# simple script to test 'keyconfig_utils' contains correct values. +# simple script to test 'bl_keymap_utils.keymap_hierarchy' contains correct values. +# Needed for 'bl_keymap_utils.keymap_hierarchy' which inspects tools. +import sys +import os +sys.path.append(os.path.join(os.path.dirname(__file__), os.pardir, os.pardir, "release", "scripts", "startup")) +del sys, os -from bpy_extras import keyconfig_utils +from bl_keymap_utils import keymap_hierarchy def check_maps(): @@ -32,7 +37,7 @@ def check_maps(): maps[km_name] = (km_space_type, km_region_type) fill_maps(km_sub) - fill_maps(keyconfig_utils.km_hierarchy()) + fill_maps(keymap_hierarchy.generate()) import bpy keyconf = bpy.context.window_manager.keyconfigs.active @@ -43,14 +48,14 @@ def check_maps(): # Check keyconfig contains only maps that exist in blender test = maps_py - maps_bl if test: - print("Keymaps that are in 'keyconfig_utils' but not blender") + print("Keymaps that are in 'bl_keymap_utils.keymap_hierarchy' but not blender") for km_id in sorted(test): print("\t%s" % km_id) err = True test = maps_bl - maps_py if test: - print("Keymaps that are in blender but not in 'keyconfig_utils'") + print("Keymaps that are in blender but not in 'bl_keymap_utils.keymap_hierarchy'") for km_id in sorted(test): km = keyconf.keymaps[km_id] print(" ('%s', '%s', '%s', [])," % (km_id, km.space_type, km.region_type))