Help with Karabiner elements custom complex rule

keybindingskeyboard

I have a busted close-bracket key on my keyboard. Previously, I had used Karabiner to map L-control+open_bracket to close_bracket using a custom rule I wrote in the xml-format used by karabiner.

However, now that I've updated to Sierra, Karabiner is out, and Karabiner elements is in. Karabiner elements uses a JSON format. I tried to create a new rule and stick it in the JSON file:

"rules": [
         {"manipulators": [
                {"description": "bracket rule",
                        "from": {"key_code": "open_bracket", 
                                 "modifiers": ["left_control"]
                                },
                          "to": [{"key_code": "close_bracket",
                                  "modifiers":[]
                                }] 
                }         ]
         }]

However, this rule doesn't seem to work the way I'd like it to (it just maps open_bracket to close_bracket).

Does anyone have an insight into what I'm doing wrong here?

Best Answer

Your sample appeared to be slightly different than other rules I've looked at. Here's a version that works for me:

file: map_lctl_plus_open_bracket_to_close_bracket.json :

{
  "title": "Map Lft-Ctl+Open-Bracket to Close-Bracket",
  "rules": [
    {
      "manipulators": [
        {
          "description": "bracket rule",
          "type": "basic",
          "from": {
            "key_code": "open_bracket",
            "modifiers": {
              "mandatory": [
                "left_control"
              ],
              "optional": [
                "caps_lock"
              ]
            }
          },
          "to": [
            {
              "key_code": "close_bracket"
            }
          ]
        }
      ]
    }
  ]
}

I wasn't able to determine any way to install the script other than through the "Import more rules from the internet" option, but I did figure out how to launch the importer on my own files.

Assuming you copy the file into /tmp/map_lctl_plus_open_bracket_to_close_bracket.json, pasting the following url into Safari should launch the importer:

karabiner://karabiner/assets/complex_modifications/import?url=file%3A%2F%2F%2Ftmp%2Fmap_lctl_plus_open_bracket_to_close_bracket.json

I have fully tested both the file content and the import url within this post, and all worked fine for me.

Good luck !


EDIT: Immediately after making this post, I think I found where the local filestore is for manually adding rules.

https://github.com/pqrs-org/KE-complex_modifications#local-testing

This is the github repo for the rules on the "Import more rules from the internet" page. It shows how to test the rules locally before submitting to the web repository.

TL;DR:

$ cp my_rule.json ~/.config/karabiner/assets/complex_modifications

The site also confirms the karabiner://... technique I mentioned above.