Skip to content

Instantly share code, notes, and snippets.

@henrebotha
Last active March 30, 2024 22:37
Show Gist options
  • Star 23 You must be signed in to star a gist
  • Fork 5 You must be signed in to fork a gist
  • Save henrebotha/666bb23d5259e6c298145cb006b02202 to your computer and use it in GitHub Desktop.
Save henrebotha/666bb23d5259e6c298145cb006b02202 to your computer and use it in GitHub Desktop.
Karabiner Elements: Caps Lock + I/J/K/L to Arrow Keys (a la Pok3r)

Instructions

  1. Install Karabiner Elements
  2. Open your karabiner.json file (it will be in ~/.config/karabiner/karabiner.json).
  3. Find complex_modifications. It will have a key rules that takes a list ("rules": [...]).
  4. Inside the square brackets, paste this:
{
    "description": "Change Caps Lock + I/J/K/L to Arrow Keys",
    "manipulators": [
        {
            "from": {
                "key_code": "caps_lock"
            },
            "to": [
                {
                    "set_variable": {
                        "name": "caps_arrows_mode",
                        "value": 1
                    }
                }
            ],
            "to_after_key_up": [
                {
                    "set_variable": {
                        "name": "caps_arrows_mode",
                        "value": 0
                    }
                }
            ],
            "to_if_alone": [
                {
                    "key_code": "caps_lock"
                }
            ],
            "type": "basic"
        },
        {
            "conditions": [
                {
                    "name": "caps_arrows_mode",
                    "type": "variable_if",
                    "value": 1
                }
            ],
            "from": {
                "key_code": "j",
                "modifiers": {
                    "optional": [
                        "any"
                    ]
                }
            },
            "to": [
                {
                    "key_code": "left_arrow"
                }
            ],
            "type": "basic"
        },
        {
            "conditions": [
                {
                    "name": "caps_arrows_mode",
                    "type": "variable_if",
                    "value": 1
                }
            ],
            "from": {
                "key_code": "k",
                "modifiers": {
                    "optional": [
                        "any"
                    ]
                }
            },
            "to": [
                {
                    "key_code": "down_arrow"
                }
            ],
            "type": "basic"
        },
        {
            "conditions": [
                {
                    "name": "caps_arrows_mode",
                    "type": "variable_if",
                    "value": 1
                }
            ],
            "from": {
                "key_code": "i",
                "modifiers": {
                    "optional": [
                        "any"
                    ]
                }
            },
            "to": [
                {
                    "key_code": "up_arrow"
                }
            ],
            "type": "basic"
        },
        {
            "conditions": [
                {
                    "name": "caps_arrows_mode",
                    "type": "variable_if",
                    "value": 1
                }
            ],
            "from": {
                "key_code": "l",
                "modifiers": {
                    "optional": [
                        "any"
                    ]
                }
            },
            "to": [
                {
                    "key_code": "right_arrow"
                }
            ],
            "type": "basic"
        }
    ]
}
@vmalloc
Copy link

vmalloc commented Feb 17, 2019

Found this very useful!
However it seems that trying Ctrl+Shift+ijkl doesn't work as expected (for example in Emacs) - I'm not sure why though

@vmalloc
Copy link

vmalloc commented Mar 7, 2019

For anyone coming here looking for the answer to modifier keys: this is the fix needed to the above -- Change the first manipulators line to:

            "manipulators": [
                    {
                      "from": {
                        "key_code": "caps_lock",
                        "modifiers": {
                          "optional": [
                            "any"
                          ]
                        }
                      },

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment