input_source_if, input_source_unless

Change an event if/unless the current input source is the specified value.

Example

Switching input source between Japanese and English at tapping the left command key.

[
    {
        "type": "basic",
        "from": {
            "key_code": "left_command",
            "modifiers": {
                "optional": ["any"]
            }
        },
        "to": [
            {
                "key_code": "left_command",
                "lazy": true
            }
        ],
        "to_if_alone": [
            {
                "key_code": "japanese_eisuu"
            }
        ],
        "to_if_held_down": [
            {
                "key_code": "left_command"
            }
        ],
        "conditions": [
            {
                "input_sources": [
                    {
                        "language": "ja"
                    }
                ],
                "type": "input_source_if"
            }
        ],
        "parameters": {
            "basic.to_if_held_down_threshold_milliseconds": 100
        }
    },
    {
        "type": "basic",
        "from": {
            "key_code": "left_command",
            "modifiers": {
                "optional": ["any"]
            }
        },
        "to": [
            {
                "key_code": "left_command",
                "lazy": true
            }
        ],
        "to_if_alone": [
            {
                "key_code": "japanese_kana"
            }
        ],
        "to_if_held_down": [
            {
                "key_code": "left_command"
            }
        ],
        "conditions": [
            {
                "input_sources": [
                    {
                        "language": "en"
                    }
                ],
                "type": "input_source_if"
            }
        ],
        "parameters": {
            "basic.to_if_held_down_threshold_milliseconds": 100
        }
    }
]

Specification

{
    "type": "input_source_if",
    "input_sources": [
        {
            "language": "language regex",
            "input_source_id": "input source id regex",
            "input_mode_id": "input mode id regex"
        },
        {
            "language": "language regex",
            "input_source_id": "input source id regex",
            "input_mode_id": "input mode id regex"
        },
        ...
    ]
}
Name Required Description
type Required "input_source_if" or "input_source_unless"
input_sources Required Target input source definitions
description Optional A human-readable comment

input_sources

input_sources is an array of objects.

Name Required Description
language Optional The language regex such as "^en$", "^ja$"
input_source_id Optional The input source id regex such as "^com\\.apple\\.keylayout\\.US$"
input_mode_id Optional The input mode id regex such as "^com\\.apple\\.inputmethod\\.Japanese\\.Hiragana$"

Multiple identifiers

If you specify multiple identifiers (language, input_source_id or input_mode_id), these are joined by “and”.

The following condition is matched if language is “ja” and input_mode_id is “com.apple.inputmethod.Japanese.Hiragana”.

{
    "type": "input_source_if",
    "input_sources": [
        {
            "language": "^ja$",
            "input_mode_id": "^com\\.apple\\.inputmethod\\.Japanese\\.Hiragana$"
        }
    ]
}

Multiple entries

If you specify multiple entries at input_sources, conditions are joined by “or”.

The following condition is matched if language is “en” or “ja”.

{
    "type": "input_source_if",
    "input_sources": [
        {
            "language": "^en$"
        },
        {
            "language": "^ja$"
        }
    ]
}

Investigate the input source identifiers

You can find the current input source identifiers by EventViewer > Variables tab.

{
    "input_source": {
        "input_mode_id": "com.apple.inputmethod.Japanese",
        "input_source_id": "com.google.inputmethod.Japanese.base",
        "language": "ja"
    }
}
eventviewer-input-source-identifiers@2x.png