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.

{
    "description": "Switching input source between Japanese and English at tapping the left command key",
    "manipulators": [
        {
            "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