On this page

Hotkey Bindings

  • Houdini now uses <modifiers> + <unmodified_key> for hotkey bindings. Some default hotkey bindings will not work on keyboard layouts that don’t have the required unmodified keys.

  • The <unmodified_key> in a binding can be an arbitrary unicode character. UTF-8 encoding is used for keymap and override files.

  • Bindings can now more easily target international keyboards with fewer limitations. The default bindings still target a US keyboard layout.

Porting Old Custom Keymap File

A custom keymap from an earlier version, which used the modified keys for bindings (e.g. ! instead of Shift+1), can be ported to the <modifiers> + <unmodified_key> equivalent by the following python script.

import keymaputils

keymaputils.applyMappingToKeymapFile("/path/to/input.keymap",
                                     keymaputils.mappingLegacyShiftedUS,
                                     "/path/to/output.keymap")

Porting Custom Keymap File to Another Keyboard Layout

A custom keymap already using the new <modifiers> + <unmodified_key> bindings can be ported from one keyboard layout to another by a simple python script.

For example, the following script will port a keymap for a US layout to a French AZERTY layout, by keeping most letter key bindings the same and ramping the non-letter keys by physical location.

import keymaputils

# NB: A mapping to an empty string removes any bindings using that key.
mapping = {
    '`' : '²',
    '1' : '&',
    '2' : 'É',
    '3' : '"',
    '4' : '\'',
    '5' : '(',
    '6' : '-',
    '7' : 'È',
    '8' : '_',
    '9' : 'Ç',
    '0' : 'À',
    '-' : ')',

    '[' : '',
    ']' : '$',
    ';' : 'M',
    '\'': 'Ù',
    'M' : ',',
    ',' : ';',
    '.' : ':',
    '/' : '!'
}

keymaputils.applyMappingToKeymapFile("/path/to/input.keymap",
                                     mapping,
                                     "/path/to/output.keymap")

What’s new in Houdini 20