I’ve been working away from my office a lot, so I’ve been using my MacBook Pro keyboard as often as my Ultimate Hacking Keyboard. I missed the Mod-J/K/I/L arrow key navigation, so I hacked a little modification in using Karabiner that fills the gap.

My own reasoning: I have TOS, and as a result I’m lacking feeling in some of my fingers. This makes using the little arrow keys on the MacBook Pro difficult, as I can’t differentiate which key I’m pressing and constantly mistype. Staying on the home row is much easier for me.

More from "KeyBinding"click here to see all

This modification works in tandem with a set of BetterTouchTool triggers, as it’s just a lot easier to assign a bunch of shortcuts in BetterTouchTool, where you can just press the combinations to register them. All I do with Karabiner is change the semicolon to the Function key when it’s held down with other keys. Then, in BetterTouchTool, I assign Fn+J/K/I/L to be arrow keys, with accommodations for , , and modifiers. You can, of course, opt for Fn+H/J/K/L if you prefer Vim navigation.

To set up the semicolon as a Function key, just add the following in Complex Modifications:

add-your-own-rule.jpg
{
    "manipulators": [
        {
            "description": "Semicolon as fn",
            "from": {
                "key_code": "semicolon",
                "modifiers": { "optional": ["any"] }
            },
            "to": [{ "key_code": "fn" }],
            "to_if_alone": [{ "key_code": "semicolon" }],
            "type": "basic"
        }
    ]
}
Copy

Then, in BetterTouchTool, set up the Fn-JKIL to perform arrow functions, adding bindings like + and ++.

arrow-cluster-bettertouchtool.jpg

I’ve exported BetterTouchTool settings for JKIL and HJKL mappings, if you just want to load them as a BetterTouchTool preset. Just unzip that and use Preset > Import Preset in BetterTouchTool.

J/K/I/L Preset Zip H/J/K/L Preset Zip

Caveats

Like my other key combination bindings, this Karabiner setup means you no longer have key repeat on the semicolon key. I don’t ever type ;;;;;, and if I ever needed to, I don’t mind repeatedly tapping ; to get it.

The only thing missing from this setup is the usual behavior of Fn-arrow key, which is to trigger Home, End, Page Up, and Page Down. I don’t use these much, as I use +A and +E for Home and End, and I just don’t use Page Up and Page Down much at all. To get full arrow key functionality, you kind of have to use Fn with the semicolon, otherwise you’ve lost a modifier. The alternative would be to do all the mappings in Karabiner and use a non-modifier key combination, like actually mapping ;j to left_arrow. Then you’d have Fn available. It would just be a lot more work, as you’d have to do all the modifier mappings in Karabiner.

As a side note, I also currently have the Tab key set up to function the same as the semicolon key, sending Function if held with other keys. This is an experiment. On my Ultimate Hacking Keyboard, the Tab key actually functions as the Mouse key, giving me keyboard-based mouse movements with the same key cluster. But I don’t use that much; it’s slower than just moving my hand to the trackpad.

Got questions or want to share your own tips? Join us on the forum!