patch [#34437] Fix text editor bug: ctrl+F is not configurable
in fact the keymap editor was missing other keymaps so added these too, also updated keymap checker to make sure there is no mismatch with region/space types.
This commit is contained in:
@@ -18,6 +18,11 @@
|
|||||||
|
|
||||||
# <pep8 compliant>
|
# <pep8 compliant>
|
||||||
|
|
||||||
|
# bpy.type.KeyMap: (km.name, km.space_type, km.region_type, [...])
|
||||||
|
|
||||||
|
# ('Script', 'EMPTY', 'WINDOW', []),
|
||||||
|
|
||||||
|
|
||||||
KM_HIERARCHY = [
|
KM_HIERARCHY = [
|
||||||
('Window', 'EMPTY', 'WINDOW', []), # file save, window change, exit
|
('Window', 'EMPTY', 'WINDOW', []), # file save, window change, exit
|
||||||
('Screen', 'EMPTY', 'WINDOW', [ # full screen, undo, screenshot
|
('Screen', 'EMPTY', 'WINDOW', [ # full screen, undo, screenshot
|
||||||
@@ -42,6 +47,7 @@ KM_HIERARCHY = [
|
|||||||
|
|
||||||
('Vertex Paint', 'EMPTY', 'WINDOW', []),
|
('Vertex Paint', 'EMPTY', 'WINDOW', []),
|
||||||
('Weight Paint', 'EMPTY', 'WINDOW', []),
|
('Weight Paint', 'EMPTY', 'WINDOW', []),
|
||||||
|
('Weight Paint Vertex Selection', 'EMPTY', 'WINDOW', []),
|
||||||
('Face Mask', 'EMPTY', 'WINDOW', []),
|
('Face Mask', 'EMPTY', 'WINDOW', []),
|
||||||
('Image Paint', 'EMPTY', 'WINDOW', []), # image and view3d
|
('Image Paint', 'EMPTY', 'WINDOW', []), # image and view3d
|
||||||
('Sculpt', 'EMPTY', 'WINDOW', []),
|
('Sculpt', 'EMPTY', 'WINDOW', []),
|
||||||
@@ -49,9 +55,12 @@ KM_HIERARCHY = [
|
|||||||
('Armature Sketch', 'EMPTY', 'WINDOW', []),
|
('Armature Sketch', 'EMPTY', 'WINDOW', []),
|
||||||
('Particle', 'EMPTY', 'WINDOW', []),
|
('Particle', 'EMPTY', 'WINDOW', []),
|
||||||
|
|
||||||
|
('Knife Tool Modal Map', 'EMPTY', 'WINDOW', []),
|
||||||
|
('Paint Stroke Modal', 'EMPTY', 'WINDOW', []),
|
||||||
|
|
||||||
('Object Non-modal', 'EMPTY', 'WINDOW', []), # mode change
|
('Object Non-modal', 'EMPTY', 'WINDOW', []), # mode change
|
||||||
|
|
||||||
('3D View Generic', 'VIEW_3D', 'WINDOW', []) # toolbar and properties
|
('3D View Generic', 'VIEW_3D', 'WINDOW', []), # toolbar and properties
|
||||||
]),
|
]),
|
||||||
|
|
||||||
('Frames', 'EMPTY', 'WINDOW', []), # frame navigation (per region)
|
('Frames', 'EMPTY', 'WINDOW', []), # frame navigation (per region)
|
||||||
@@ -59,53 +68,65 @@ KM_HIERARCHY = [
|
|||||||
('Animation', 'EMPTY', 'WINDOW', []), # frame change on click, preview range (per region)
|
('Animation', 'EMPTY', 'WINDOW', []), # frame change on click, preview range (per region)
|
||||||
('Animation Channels', 'EMPTY', 'WINDOW', []),
|
('Animation Channels', 'EMPTY', 'WINDOW', []),
|
||||||
('Graph Editor', 'GRAPH_EDITOR', 'WINDOW', [
|
('Graph Editor', 'GRAPH_EDITOR', 'WINDOW', [
|
||||||
('Graph Editor Generic', 'GRAPH_EDITOR', 'WINDOW', [])
|
('Graph Editor Generic', 'GRAPH_EDITOR', 'WINDOW', []),
|
||||||
]),
|
]),
|
||||||
('Dopesheet', 'DOPESHEET_EDITOR', 'WINDOW', []),
|
('Dopesheet', 'DOPESHEET_EDITOR', 'WINDOW', []),
|
||||||
('NLA Editor', 'NLA_EDITOR', 'WINDOW', [
|
('NLA Editor', 'NLA_EDITOR', 'WINDOW', [
|
||||||
('NLA Channels', 'NLA_EDITOR', 'WINDOW', []),
|
('NLA Channels', 'NLA_EDITOR', 'WINDOW', []),
|
||||||
('NLA Generic', 'NLA_EDITOR', 'WINDOW', [])
|
('NLA Generic', 'NLA_EDITOR', 'WINDOW', []),
|
||||||
]),
|
]),
|
||||||
|
|
||||||
('Image', 'IMAGE_EDITOR', 'WINDOW', [
|
('Image', 'IMAGE_EDITOR', 'WINDOW', [
|
||||||
('UV Editor', 'EMPTY', 'WINDOW', []), # image (reverse order, UVEdit before Image
|
('UV Editor', 'EMPTY', 'WINDOW', []), # image (reverse order, UVEdit before Image
|
||||||
('Image Paint', 'EMPTY', 'WINDOW', []), # image and view3d
|
('Image Paint', 'EMPTY', 'WINDOW', []), # image and view3d
|
||||||
('UV Sculpt', 'EMPTY', 'WINDOW', []),
|
('UV Sculpt', 'EMPTY', 'WINDOW', []),
|
||||||
('Image Generic', 'IMAGE_EDITOR', 'WINDOW', [])
|
('Image Generic', 'IMAGE_EDITOR', 'WINDOW', []),
|
||||||
]),
|
]),
|
||||||
|
|
||||||
('Timeline', 'TIMELINE', 'WINDOW', []),
|
('Timeline', 'TIMELINE', 'WINDOW', []),
|
||||||
('Outliner', 'OUTLINER', 'WINDOW', []),
|
('Outliner', 'OUTLINER', 'WINDOW', []),
|
||||||
|
|
||||||
('Node Editor', 'NODE_EDITOR', 'WINDOW', [
|
('Node Editor', 'NODE_EDITOR', 'WINDOW', [
|
||||||
('Node Generic', 'NODE_EDITOR', 'WINDOW', [])
|
('Node Generic', 'NODE_EDITOR', 'WINDOW', []),
|
||||||
|
]),
|
||||||
|
('Sequencer', 'SEQUENCE_EDITOR', 'WINDOW', [
|
||||||
|
('SequencerCommon', 'SEQUENCE_EDITOR', 'WINDOW', []),
|
||||||
|
('SequencerPreview', 'SEQUENCE_EDITOR', 'WINDOW', []),
|
||||||
]),
|
]),
|
||||||
('Sequencer', 'SEQUENCE_EDITOR', 'WINDOW', []),
|
|
||||||
('Logic Editor', 'LOGIC_EDITOR', 'WINDOW', []),
|
('Logic Editor', 'LOGIC_EDITOR', 'WINDOW', []),
|
||||||
|
|
||||||
('File Browser', 'FILE_BROWSER', 'WINDOW', [
|
('File Browser', 'FILE_BROWSER', 'WINDOW', [
|
||||||
('File Browser Main', 'FILE_BROWSER', 'WINDOW', []),
|
('File Browser Main', 'FILE_BROWSER', 'WINDOW', []),
|
||||||
('File Browser Buttons', 'FILE_BROWSER', 'WINDOW', [])
|
('File Browser Buttons', 'FILE_BROWSER', 'WINDOW', []),
|
||||||
]),
|
]),
|
||||||
|
|
||||||
|
('Info', 'INFO', 'WINDOW', []),
|
||||||
|
|
||||||
('Property Editor', 'PROPERTIES', 'WINDOW', []), # align context menu
|
('Property Editor', 'PROPERTIES', 'WINDOW', []), # align context menu
|
||||||
|
|
||||||
('Text', 'TEXT_EDITOR', 'WINDOW', []),
|
('Text', 'TEXT_EDITOR', 'WINDOW', [
|
||||||
|
('Text Generic', 'TEXT_EDITOR', 'WINDOW', []),
|
||||||
|
]),
|
||||||
('Console', 'CONSOLE', 'WINDOW', []),
|
('Console', 'CONSOLE', 'WINDOW', []),
|
||||||
('Clip', 'CLIP_EDITOR', 'WINDOW', [
|
('Clip', 'CLIP_EDITOR', 'WINDOW', [
|
||||||
('Clip Editor', 'CLIP_EDITOR', 'WINDOW', []),
|
('Clip Editor', 'CLIP_EDITOR', 'WINDOW', []),
|
||||||
('Clip Graph Editor', 'CLIP_EDITOR', 'WINDOW', []),
|
('Clip Graph Editor', 'CLIP_EDITOR', 'WINDOW', []),
|
||||||
|
('Clip Dopesheet Editor', 'CLIP_EDITOR', 'WINDOW', []),
|
||||||
('Mask Editing', 'EMPTY', 'WINDOW', []), # image (reverse order, UVEdit before Image
|
('Mask Editing', 'EMPTY', 'WINDOW', []), # image (reverse order, UVEdit before Image
|
||||||
]),
|
]),
|
||||||
|
|
||||||
('View3D Gesture Circle', 'EMPTY', 'WINDOW', []),
|
('View3D Gesture Circle', 'EMPTY', 'WINDOW', []),
|
||||||
|
('Gesture Straight Line', 'EMPTY', 'WINDOW', []),
|
||||||
|
('Gesture Zoom Border', 'EMPTY', 'WINDOW', []),
|
||||||
('Gesture Border', 'EMPTY', 'WINDOW', []),
|
('Gesture Border', 'EMPTY', 'WINDOW', []),
|
||||||
|
|
||||||
('Standard Modal Map', 'EMPTY', 'WINDOW', []),
|
('Standard Modal Map', 'EMPTY', 'WINDOW', []),
|
||||||
('Transform Modal Map', 'EMPTY', 'WINDOW', []),
|
('Transform Modal Map', 'EMPTY', 'WINDOW', []),
|
||||||
('View3D Fly Modal', 'EMPTY', 'WINDOW', []),
|
('View3D Fly Modal', 'EMPTY', 'WINDOW', []),
|
||||||
('View3D Rotate Modal', 'EMPTY', 'WINDOW', []),
|
('View3D Rotate Modal', 'EMPTY', 'WINDOW', []),
|
||||||
('View3D Move Modal', 'EMPTY', 'WINDOW', []),
|
('View3D Move Modal', 'EMPTY', 'WINDOW', []),
|
||||||
('View3D Zoom Modal', 'EMPTY', 'WINDOW', []),
|
('View3D Zoom Modal', 'EMPTY', 'WINDOW', []),
|
||||||
|
('View3D Dolly Modal', 'EMPTY', 'WINDOW', []),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@@ -25,40 +25,56 @@ from bpy_extras import keyconfig_utils
|
|||||||
|
|
||||||
|
|
||||||
def check_maps():
|
def check_maps():
|
||||||
maps = set()
|
maps = {}
|
||||||
|
|
||||||
def fill_maps(ls):
|
def fill_maps(ls):
|
||||||
for entry in ls:
|
for km_name, km_space_type, km_region_type, km_sub in ls:
|
||||||
maps.add(entry[0])
|
maps[km_name] = (km_space_type, km_region_type)
|
||||||
fill_maps(entry[3])
|
fill_maps(km_sub)
|
||||||
|
|
||||||
fill_maps(keyconfig_utils.KM_HIERARCHY)
|
fill_maps(keyconfig_utils.KM_HIERARCHY)
|
||||||
|
|
||||||
import bpy
|
import bpy
|
||||||
maps_bl = set(bpy.context.window_manager.keyconfigs.active.keymaps.keys())
|
keyconf = bpy.context.window_manager.keyconfigs.active
|
||||||
|
maps_bl = set(keyconf.keymaps.keys())
|
||||||
|
maps_py = set(maps.keys())
|
||||||
|
|
||||||
err = False
|
err = False
|
||||||
# Check keyconfig contains only maps that exist in blender
|
# Check keyconfig contains only maps that exist in blender
|
||||||
test = maps - maps_bl
|
test = maps_py - maps_bl
|
||||||
if test:
|
if test:
|
||||||
print("Keymaps that are in 'keyconfig_utils' but not blender")
|
print("Keymaps that are in 'keyconfig_utils' but not blender")
|
||||||
for km_id in sorted(test):
|
for km_id in sorted(test):
|
||||||
print("\t%s" % km_id)
|
print("\t%s" % km_id)
|
||||||
err = True
|
err = True
|
||||||
|
|
||||||
test = maps_bl - maps
|
test = maps_bl - maps_py
|
||||||
if test:
|
if test:
|
||||||
print("Keymaps that are in blender but not in 'keyconfig_utils'")
|
print("Keymaps that are in blender but not in 'keyconfig_utils'")
|
||||||
for km_id in sorted(test):
|
for km_id in sorted(test):
|
||||||
print("\t%s" % km_id)
|
km = keyconf.keymaps[km_id]
|
||||||
|
print(" ('%s', '%s', '%s', [])," % (km_id, km.space_type, km.region_type))
|
||||||
err = True
|
err = True
|
||||||
|
|
||||||
|
# Check space/region's are OK
|
||||||
|
print("Comparing keymap space/region types...")
|
||||||
|
for km_id, km in keyconf.keymaps.items():
|
||||||
|
km_py = maps.get(km_id)
|
||||||
|
if km_py is not None:
|
||||||
|
km_space_type, km_region_type = km_py
|
||||||
|
if km_space_type != km.space_type or km_region_type != km.region_type:
|
||||||
|
print(" Error:")
|
||||||
|
print(" expected -- ('%s', '%s', '%s', [])," % (km_id, km.space_type, km.region_type))
|
||||||
|
print(" got -- ('%s', '%s', '%s', [])," % (km_id, km_space_type, km_region_type))
|
||||||
|
print("done!")
|
||||||
|
|
||||||
return err
|
return err
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
err = check_maps()
|
err = check_maps()
|
||||||
|
|
||||||
|
import bpy
|
||||||
if err and bpy.app.background:
|
if err and bpy.app.background:
|
||||||
# alert CTest we failed
|
# alert CTest we failed
|
||||||
import sys
|
import sys
|
||||||
|
Reference in New Issue
Block a user