Merge two keyboard layouts into one

internationalizationkeyboard

I'm a Dvorak user but I also need to use international keyboard too. The problem is – when I use international phonetic keyboard it's based on Qwerty.

When I have hardware support for Dvorak (on typematrix keyboard) it all works perfectly, but when I'm on my laptop, I can't use combinations of two layouts.

How can I create a custom layout which would be a combination of two keyboard layouts? If there is no way, please suggest some tool to create a custom keyboard layout for a Mac OSX.

I'm on Mountain Lion.

Best Answer

What IPA layout do you use? SIL's website has one for Dvorak. You could edit other keyboard layouts with Ukelele or directly as XML.

You could also try adding something like this to private.xml in KeyRemap4MacBook.

<item>
<name>test</name>
<identifier>private.test</identifier>
<inputmode_not>ROMAN</inputmode_not>
<autogen>--KeyToKey-- KeyCode::Q, KeyCode::QUOTE</autogen>
<autogen>--KeyToKey-- KeyCode::W, KeyCode::COMMA</autogen>
<autogen>--KeyToKey-- KeyCode::E, KeyCode::DOT</autogen>
<autogen>--KeyToKey-- KeyCode::R, KeyCode::P</autogen>
<autogen>--KeyToKey-- KeyCode::T, KeyCode::Y</autogen>
<autogen>--KeyToKey-- KeyCode::Y, KeyCode::F</autogen>
<autogen>--KeyToKey-- KeyCode::U, KeyCode::G</autogen>
<autogen>--KeyToKey-- KeyCode::I, KeyCode::C</autogen>
<autogen>--KeyToKey-- KeyCode::O, KeyCode::R</autogen>
<autogen>--KeyToKey-- KeyCode::P, KeyCode::L</autogen>
<autogen>--KeyToKey-- KeyCode::BRACKET_LEFT, KeyCode::SLASH</autogen>
<autogen>--KeyToKey-- KeyCode::BRACKET_RIGHT, KeyCode::EQUAL</autogen>
<autogen>--KeyToKey-- KeyCode::S, KeyCode::O</autogen>
<autogen>--KeyToKey-- KeyCode::D, KeyCode::E</autogen>
<autogen>--KeyToKey-- KeyCode::F, KeyCode::U</autogen>
<autogen>--KeyToKey-- KeyCode::G, KeyCode::I</autogen>
<autogen>--KeyToKey-- KeyCode::H, KeyCode::D</autogen>
<autogen>--KeyToKey-- KeyCode::J, KeyCode::H</autogen>
<autogen>--KeyToKey-- KeyCode::K, KeyCode::T</autogen>
<autogen>--KeyToKey-- KeyCode::L, KeyCode::N</autogen>
<autogen>--KeyToKey-- KeyCode::SEMICOLON, KeyCode::S</autogen>
<autogen>--KeyToKey-- KeyCode::QUOTE, KeyCode::MINUS</autogen>
<autogen>--KeyToKey-- KeyCode::Z, KeyCode::SEMICOLON</autogen>
<autogen>--KeyToKey-- KeyCode::X, KeyCode::Q</autogen>
<autogen>--KeyToKey-- KeyCode::C, KeyCode::J</autogen>
<autogen>--KeyToKey-- KeyCode::V, KeyCode::K</autogen>
<autogen>--KeyToKey-- KeyCode::B, KeyCode::X</autogen>
<autogen>--KeyToKey-- KeyCode::N, KeyCode::B</autogen>
<autogen>--KeyToKey-- KeyCode::COMMA, KeyCode::W</autogen>
<autogen>--KeyToKey-- KeyCode::DOT, KeyCode::V</autogen>
<autogen>--KeyToKey-- KeyCode::SLASH, KeyCode::Z</autogen>
<autogen>--KeyToKey-- KeyCode::MINUS, KeyCode::BRACKET_LEFT</autogen>
<autogen>--KeyToKey-- KeyCode::EQUAL, KeyCode::BRACKET_RIGHT</autogen>
</item>

It's based on remap.qwerty2dvorak in the checkbox.xml in the test folder.

If someone else was looking for a way to change the input method when holding a key, see this question.