Karabiner elements custom complex rule

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.


Your own code simply leaves out the key word "mandatory" in combination with "left_control" – so Karabiner EACH time is content to register only "open_bracket" to remap the key to "close_bracket".

EDIT, … much later: you also need to code "type": "basic" in every manipulator !

Note: there is a complementary key word "optional" that may be default in lack of "mandatory"…