8
$\begingroup$

I learned to touch type in Dvorak keyboard map in late '90s. is there a way to change key mapping assignment to alternate layout without need to remap each key individually in user preference? I fear something would be overlooked in manual process. thanks

EDIT: further thought about problem suggests this is asking the wrong question. in order to take advantage of physical layout design intent, remap more involved than simple move of keys. I will do more research and close question next day or two.

Example: 'z' / 'Z' key qwerty is ';' / ':' key in Dvorak. so undo command is not convenient to type one handed in Dvorak layout.

$\endgroup$
  • $\begingroup$ Couldn't you tell your OS that your using a keyboard with that layout...? $\endgroup$ – GiantCowFilms Jan 17 '15 at 19:45
  • $\begingroup$ Interesting question, more of a hardware thing though...? $\endgroup$ – GiantCowFilms Jan 17 '15 at 19:45
  • $\begingroup$ So are you reperpsing a qwerty keyboard as dovorak? $\endgroup$ – GiantCowFilms Jan 17 '15 at 19:46
  • $\begingroup$ have setup windows (using XP pro) to alternate key mapping. problem manifests both when trying to press qwerty layout key to "do something" in blender while Dvorak map enabled and when trying to type name data touch typing when qwerty active. only keys that overlap are 'A' and 'M' keys, so unless verify system actually changes as needed, something will go wrong.? $\endgroup$ – Phred Jan 17 '15 at 19:56
  • 4
    $\begingroup$ Please good sir unlearn that dvorak thing and learn qwerty, please assign this task some energy and live in harmony with the rest of the world.. $\endgroup$ – Jaroslav Jerryno Novotny Jan 17 '15 at 23:01
3
$\begingroup$

There is a maintained repo on Github by BioticPixels with a script that does this exactly https://github.com/BioticPixels/Blender-Dvorak-Key-Configuration, (more permanent link). It appears to not be feature complete but the author lists the restrictions and it appears to be usable for the most part. There are install instructions present or you can open your text editor and execute the script from there. Direct link.

$\endgroup$
  • 1
    $\begingroup$ this looks very promising and I will focus my research in this direction. (expect some challenge moving from Mac laptop to win tower...). thanks for the pointer! $\endgroup$ – Phred Jan 18 '15 at 19:55
0
$\begingroup$

a (poor) solution is to take an old keyboard and reconfigure key caps to align with Dvorak mapping. it would allow visual confirmation of key choice when working in blender mode, but will probably not be optimal as default setup designed to qwerty home key position.

a brute force solution at best.

$\endgroup$
0
$\begingroup$

The key configuration from pixelbiotics is a good option. All of the common commands are taken care of.

Another thing you can do is this. In your language settings keep the qwerty layout as a second option, and use the key commands to switch back and forth.

Windows 8 and 8.1 = windows key space

Windows 7 = CtrlShift

I'm a Dvorak user myself, and sometimes others use my computer both at home and at work.

$\endgroup$
0
$\begingroup$

This isn't the most elegant solution but I've written a script that will remap the default key mappings from qwerty to dvorak.

Warning: Only run this once, since the second run will remap the remapping and cause chaos.

### WARNING: ONLY RUN ONCE!

import bpy

q_to_d = {
    'MINUS': 'LEFT_BRACKET',
    'EQUAL': 'RIGHT_BRACKET',
    'Q': 'QUOTE',
    'W': 'COMMA',
    'E': 'PERIOD',
    'R': 'P',
    'T': 'Y',
    'Y': 'F',
    'U': 'G',
    'I': 'C',
    'O': 'R',
    'P': 'L',
    'LEFT_BRACKET': 'SLASH',
    'RIGHT_BRACKET': 'EQUAL',
#    'BACK_SLASH': 'BACK_SLASH',
#    'A': 'A',
    'S': 'O',
    'D': 'E',
    'F': 'U',
    'G': 'I',
    'H': 'D',
    'J': 'H',
    'K': 'T',
    'L': 'N',
    'SEMI_COLON': 'S',
    'QUOTE': 'MINUS',
    'Z': 'SEMI_COLON',
    'X': 'Q',
    'C': 'J',
    'V': 'K',
    'B': 'X',
    'N': 'B',
#    'M': 'M',
    'COMMA': 'W',
    'PERIOD ': 'V',
    'SLASH': 'Z',
}


wm = bpy.context.window_manager
default = wm.keyconfigs['Blender']

for keymap in default.keymaps:
    print('---- {} ----'.format(keymap.name))

    for keymap_item in keymap.keymap_items:
        if keymap_item.type in q_to_d:
            print('Changed: {:20.20} -> {:>20.20}:{}'
                .format(keymap_item.name, keymap_item.type, q_to_d[keymap_item.type]))
            keymap_item.type = q_to_d[keymap_item.type]
$\endgroup$
0
$\begingroup$

You can download the keyboard import script from here: https://github.com/vpicaver/BlenderQuertyToDvorak

To map Qwerty to Dvorak in Blender 2.8:

  1. Find modules/bl_keymap_utils/io.py On MacOS, mine is located here: /Applications/blender.app/Contents/Resources/2.80/scripts/modules/bl_keymap_utils/io.py

  2. In io.py find def keyconfig_export_as_data(...) function

  3. Add all_keymaps=True before any of the code runs in keyconfig_export_as_data() This will force Blender to export all the keyboard short cuts

  4. Start Blender, or restart it if you already have it open

  5. Export all the keyboard to a python file shortcuts in Edit->Preferences->Keymap

  6. Scroll to the bottom of the exported python file and replace:

    if __name__ == "__main__":
        import os
        from bl_keymap_utils.io import keyconfig_import_from_data
        keyconfig_import_from_data(os.path.splitext(os.path.basename(__file__))[0], keyconfig_data)
    

    with

    q_to_d = {
         'MINUS': 'LEFT_BRACKET',
         'EQUAL': 'RIGHT_BRACKET',
         'Q': 'QUOTE',
         'W': 'COMMA',
         'E': 'PERIOD',
         'R': 'P',
         'T': 'Y',
         'Y': 'F',
         'U': 'G',
         'I': 'C',
         'O': 'R',
         'P': 'L',
         'LEFT_BRACKET': 'SLASH',
         'RIGHT_BRACKET': 'EQUAL',
     #    'BACK_SLASH': 'BACK_SLASH',
     #    'A': 'A',
         'S': 'O',
         'D': 'E',
         'F': 'U',
         'G': 'I',
         'H': 'D',
         'J': 'H',
         'K': 'T',
         'L': 'N',
         'SEMI_COLON': 'S',
         'QUOTE': 'MINUS',
         'Z': 'SEMI_COLON',
         'X': 'Q',
         'C': 'J',
         'V': 'K',
         'B': 'X',
         'N': 'B',
     #    'M': 'M',
         'COMMA': 'W',
         'PERIOD ': 'V',
         'SLASH': 'Z',
    }
    
    if __name__ == "__main__":
        import os
        from bl_keymap_utils.io import keyconfig_import_from_data
    
        def remap(keys):
            if isinstance(keys, (list, tuple, dict)):
                for k in keys:
                    if isinstance(k, (list, tuple)):
                        remap(k)
                    elif isinstance(k, dict):
                        #print(type(k))
                        #print(k)
    
                        if 'type' in k:
                            dvorakKey = q_to_d.get(k["type"], None)
                            if dvorakKey != None:
                                print(f'Remapping {k["type"]} -> {dvorakKey}')
                                k["type"] = dvorakKey
                        else:
                            for (dicKey, dicValue) in k.items():
                                remap(dicValue)
    
        remap(keyconfig_data)
    

    keyconfig_import_from_data(os.path.splitext(os.path.basename(file))[0], keyconfig_data)

  7. Save and re-import the saved file.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.