Last active
July 3, 2019 21:01
-
-
Save EClaesson/9f0e0ac6cedf2bfce5ffa7a978176664 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import bpy | |
######################################### | |
# Configuration # | |
######################################### | |
# If True, key modifiers will be skipped (always set to NONE). | |
IGNORE_KEY_MODIFIER = False | |
# If True, skips the os key in shortcuts. | |
IGNORE_OSKEY = True | |
# Ignores everything matching any string in the list. | |
IGNORE_PATTERNS = ['MOUSE', 'EVT', 'NDOF', 'TRACKPAD', 'TIMER', 'WINDOW', 'TEXTINPUT', 'MEDIA', 'LINE_FEED'] | |
# Format for a line of output. | |
OUTPUT_FORMAT = '{shift:>6}{alt:>4}{ctrl:>5}{os:>3}{mod:>4}{key:>4}' | |
# Which keymap to test. | |
KEYMAP_NAME = 'Window' | |
######################################### | |
# Code # | |
######################################### | |
keymap = bpy.context.window_manager.keyconfigs.user.keymaps.get(KEYMAP_NAME) | |
keys = [ | |
'LEFTMOUSE', 'MIDDLEMOUSE', 'RIGHTMOUSE', 'BUTTON4MOUSE', 'BUTTON5MOUSE', 'BUTTON6MOUSE', | |
'BUTTON7MOUSE', 'ACTIONMOUSE', 'SELECTMOUSE', 'MOUSEMOVE', 'INBETWEEN_MOUSEMOVE', 'TRACKPADPAN', | |
'TRACKPADZOOM', 'MOUSEROTATE', 'WHEELUPMOUSE', 'WHEELDOWNMOUSE', 'WHEELINMOUSE', 'WHEELOUTMOUSE', | |
'EVT_TWEAK_L', 'EVT_TWEAK_M', 'EVT_TWEAK_R', 'EVT_TWEAK_A', 'EVT_TWEAK_S', 'A', 'B', 'C', 'D', 'E', | |
'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', | |
'Z', 'ZERO', 'ONE', 'TWO', 'THREE', 'FOUR', 'FIVE', 'SIX', 'SEVEN', 'EIGHT', 'NINE', 'LEFT_CTRL', | |
'LEFT_ALT', 'LEFT_SHIFT', 'RIGHT_ALT', 'RIGHT_CTRL', 'RIGHT_SHIFT', 'OSKEY', 'GRLESS', 'ESC', 'TAB', | |
'RET', 'SPACE', 'LINE_FEED', 'BACK_SPACE', 'DEL', 'SEMI_COLON', 'PERIOD', 'COMMA', 'QUOTE', | |
'ACCENT_GRAVE', 'MINUS', 'SLASH', 'BACK_SLASH', 'EQUAL', 'LEFT_BRACKET', 'RIGHT_BRACKET', 'LEFT_ARROW', | |
'DOWN_ARROW', 'RIGHT_ARROW', 'UP_ARROW', 'NUMPAD_2', 'NUMPAD_4', 'NUMPAD_6', 'NUMPAD_8', 'NUMPAD_1', | |
'NUMPAD_3', 'NUMPAD_5', 'NUMPAD_7', 'NUMPAD_9', 'NUMPAD_PERIOD', 'NUMPAD_SLASH', 'NUMPAD_ASTERIX', | |
'NUMPAD_0', 'NUMPAD_MINUS', 'NUMPAD_ENTER', 'NUMPAD_PLUS', 'F1', 'F2', 'F3', 'F4', 'F5', 'F6', 'F7', | |
'F8', 'F9', 'F10', 'F11', 'F12', 'F13', 'F14', 'F15', 'F16', 'F17', 'F18', 'F19', 'PAUSE', 'INSERT', | |
'HOME', 'PAGE_UP', 'PAGE_DOWN', 'END', 'MEDIA_PLAY', 'MEDIA_STOP', 'MEDIA_FIRST', 'MEDIA_LAST', | |
'TEXTINPUT', 'WINDOW_DEACTIVATE', 'TIMER', 'TIMER0', 'TIMER1', 'TIMER2', 'TIMER_JOBS', 'TIMER_AUTOSAVE', | |
'TIMER_REPORT', 'TIMERREGION', 'NDOF_MOTION', 'NDOF_BUTTON_MENU', 'NDOF_BUTTON_FIT', 'NDOF_BUTTON_TOP', | |
'NDOF_BUTTON_BOTTOM', 'NDOF_BUTTON_LEFT', 'NDOF_BUTTON_RIGHT', 'NDOF_BUTTON_FRONT', 'NDOF_BUTTON_BACK', | |
'NDOF_BUTTON_ISO1', 'NDOF_BUTTON_ISO2', 'NDOF_BUTTON_ROLL_CW', 'NDOF_BUTTON_ROLL_CCW', 'NDOF_BUTTON_SPIN_CW', | |
'NDOF_BUTTON_SPIN_CCW', 'NDOF_BUTTON_TILT_CW', 'NDOF_BUTTON_TILT_CCW', 'NDOF_BUTTON_ROTATE', | |
'NDOF_BUTTON_PANZOOM', 'NDOF_BUTTON_DOMINANT', 'NDOF_BUTTON_PLUS', 'NDOF_BUTTON_MINUS', 'NDOF_BUTTON_ESC', | |
'NDOF_BUTTON_ALT', 'NDOF_BUTTON_SHIFT', 'NDOF_BUTTON_CTRL', 'NDOF_BUTTON_1', 'NDOF_BUTTON_2', 'NDOF_BUTTON_3', | |
'NDOF_BUTTON_4', 'NDOF_BUTTON_5', 'NDOF_BUTTON_6', 'NDOF_BUTTON_7', 'NDOF_BUTTON_8', 'NDOF_BUTTON_9', | |
'NDOF_BUTTON_10', 'NDOF_BUTTON_A', 'NDOF_BUTTON_B', 'NDOF_BUTTON_C'] | |
taken = [] | |
for item in keymap.keymap_items: | |
taken.append({'type': item.type, 'shift': item.shift, 'alt': item.alt, 'ctrl': item.ctrl, 'oskey': item.oskey, 'key_modifier': item.key_modifier}) | |
bpy.ops.text.new() | |
text = bpy.data.texts[-1] | |
text.name = 'Unused Shortcuts ({0})'.format(KEYMAP_NAME) | |
text.write('Unused Shortcuts For Keymap "{0}".\n\n'.format(KEYMAP_NAME)) | |
text.write('===================================\n') | |
text.write('SHIFT|ALT|CTRL|OS|MOD|KEY\n') | |
text.write('===================================\n\n') | |
output = '' | |
tf = [True, False] | |
for key in keys: | |
for mod in (['NONE'] + keys) if not IGNORE_KEY_MODIFIER else ['NONE']: | |
for shift in tf: | |
for alt in tf: | |
for ctrl in tf: | |
for oskey in tf if not IGNORE_OSKEY else [False]: | |
if {'type': key, 'key_modifier': mod, 'shift': shift, 'alt': alt, 'ctrl': ctrl, 'oskey': oskey} not in taken: | |
ignore = False | |
for pattern in IGNORE_PATTERNS: | |
if pattern in key or pattern in mod: | |
ignore = True | |
break | |
if ignore: | |
break | |
output += OUTPUT_FORMAT.format( | |
shift='Shift ' if shift else '', | |
alt='Alt ' if alt else '', | |
ctrl='Ctrl ' if ctrl else '', | |
os='OS ' if oskey else '', | |
mod=mod + ' ' if mod != 'NONE' else '', | |
key=key | |
) + '\n' | |
text.write(output) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
It seems to just list ALL hotkeys, regardless of whether they're used or not? I get an output of 90700+ lines of shortcuts. Blender v2.78c, 2017-02-24 14:33
Or am I simply misunderstanding how to use it?