EDIT: I just added two "[ ]" brackets to the final "to":[{ -part, as their lack got s.o.an [error] !
==========================================================================
So, here is a "final version" (some notes to/from a first attempt are appended at bottom):
... some sample code that excludes any typing except letters "a" & "b".
This example is set to only work in TextEdit (for testing purposes) but of course you can change/delete this "conditions" (in last manipulator).
– The "Excluding" is prepared by Shft-Ctrl-A
which solely sets "none_but_ab"
to true (1).
– Next in line is a Stop-manipulator (security first); it sets "none_but_ab"
to "0" after holding "x" 2 sec.
– Both following parts out-put our "a" and "b" letters, excluding them from following annihilation.
– The fatal last manipulator grabs "any: key_code" and renders it to "none" …
– Be careful with your Stop-mechanism: singular keys work best, modified combos may fail!
– Some more ideas:
By adding "command" ("shift") to the last "from", you could prevent app-Cmd-shortcuts (capital letters).
Karabiner El. can start before login (Preferences > 'Copy the current …'); "password" would be affected!
I also would like to know how "Shift" could be applied to "any":"key_code", forcing capital letters, or if numbers can somehow be "selected". Well, let's see …
{ "description": "============= vk_none but a,b ============= ",
"manipulators": [
{
"from": { "key_code": "a",
"modifiers": {
"mandatory": ["left_shift", "left_control"]
} },
"to": [
{ "set_variable": {
"name": "none_but_ab",
"value": 1 } }
],
"type": "basic"
},
{
"from": { "key_code": "x" },
"parameters": { "basic.to_if_held_down_threshold_milliseconds": 2000 },
"to_if_held_down": [
{ "key_code": "x" },
{ "set_variable": {
"name": "none_but_ab",
"value": 0 } }
],
"type": "basic"
},
{ "from": { "key_code": "a" },
"to": [ { "key_code": "a" } ],
"type": "basic" },
{ "from": { "key_code": "b" },
"to": [ { "key_code": "b" } ],
"type": "basic" },
{
"conditions": [
{ "name": "none_but_ab",
"type": "variable_if",
"value": 1 },
{ "bundle_identifiers": [
"^com.apple.TextEdit" ],
"type": "frontmost_application_if"
}
],
"from": { "any": "key_code",
"modifiers": {
"optional": ["any"] }
},
"to": [ { "key_code": "vk_none" } ],
"type": "basic"
}
]
}
(Here are some remains from a first (deleted) answer at this:
note the twisted "any: key_code" part that calls every key, including "modifiers…any"
Interestingly 'from-to' units within
{manipulators: …} Karabiner.json are worked through from top to bottom
until one is executable.
So if you want particular letters (a, b) to work nonetheless, you must call them previously.
Starting value for any variable is "0"
… values will "live" while Karabiner is running!
… while experimenting I made my monitor sleep, but when I typed my pw – one letter simply was not recognised. I had to start from an external drive and change my code.
)
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 :
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:
The site also confirms the
karabiner://...
technique I mentioned above.