Letter key release order modifier

Holding down v and pressing j or k enters arrow mode.

  • v (hold) + j: down arrow
  • v (hold) + k: up arrow
{
    "description": "Holding down v and pressing j,k enters arrow mode",
    "manipulators": [
        //
        // v+j
        //

        {
            "type": "basic",
            "from": {
                "key_code": "j",
                "modifiers": { "optional": ["any"] }
            },
            "to": [{ "key_code": "down_arrow" }],
            "conditions": [
                { "type": "variable_if", "name": "v_flag", "value": true }
            ]
        },
        {
            "type": "basic",
            "from": {
                "simultaneous": [{ "key_code": "v" }, { "key_code": "j" }],
                "simultaneous_options": {
                    "key_down_order": "strict",
                    "key_up_order": "strict_inverse",
                    "to_after_key_up": [
                        { "set_variable": { "name": "v_flag", "value": false } }
                    ]
                },
                "modifiers": { "optional": ["any"] }
            },
            "to": [
                { "set_variable": { "name": "v_flag", "value": true } },
                { "key_code": "down_arrow" }
            ],
            "parameters": {
                "basic.simultaneous_threshold_milliseconds": 500
            }
        },

        //
        // v+k
        //

        {
            "type": "basic",
            "from": {
                "key_code": "k",
                "modifiers": { "optional": ["any"] }
            },
            "to": [{ "key_code": "up_arrow" }],
            "conditions": [
                { "type": "variable_if", "name": "v_flag", "value": true }
            ]
        },
        {
            "type": "basic",
            "from": {
                "simultaneous": [{ "key_code": "v" }, { "key_code": "k" }],
                "simultaneous_options": {
                    "key_down_order": "strict",
                    "key_up_order": "strict_inverse",
                    "to_after_key_up": [
                        { "set_variable": { "name": "v_flag", "value": false } }
                    ]
                },
                "modifiers": { "optional": ["any"] }
            },
            "to": [
                { "set_variable": { "name": "v_flag", "value": true } },
                { "key_code": "up_arrow" }
            ],
            "parameters": {
                "basic.simultaneous_threshold_milliseconds": 500
            }
        }
    ]
}