⛓️

Karabiner を使って Excel で ESCキー3連打でA1セルに移動する。

2024/05/19に公開

Karabiner-Elements でどんなことができるか勉強のため試しに書いてみました。

  • conditions.typefrontmost_application_if を指定してExcelのみ指定。
  • 3連打は escape_pressed_1stescape_pressed_2nd でフラグ管理。
  • Ctrl+g でジャンプの小窓を表示 → Tab で入力欄移動 → "A1"と入力 → Enter というキー入力の流れを3回目押したときのESCのtoの処理に書いたら動きました。
  • 小窓の表示を待つためhold_down_millisecondsでちょっと処理を待たせています。(という動きになっているか少し自信ない)
{
    "description": "Excel: 3 times ESC repeated to jump A1",
    "manipulators": [
        {
            "conditions": [
                {
                    "bundle_identifiers": [
                        "^com\\.microsoft\\.Excel"
                    ],
                    "type": "frontmost_application_if"
                },
                {
                    "name": "escape_pressed_2nd",
                    "type": "variable_if",
                    "value": 1
                }
            ],
            "from": {
                "key_code": "escape"
            },
            "to": [
                {
                    "key_code": "g",
                    "modifiers": [
                        "control"
                    ]
                },
                {
                    "hold_down_milliseconds": 200,
                    "key_code": "left_control"
                },
                {
                    "key_code": "tab"
                },
                {
                    "key_code": "a",
                    "modifiers": [
                        "shift"
                    ]
                },
                {
                    "key_code": "1"
                },
                {
                    "key_code": "return_or_enter"
                }
            ],
            "type": "basic"
        },
        {
            "conditions": [
                {
                    "name": "escape_pressed_1st",
                    "type": "variable_if",
                    "value": 1
                }
            ],
            "from": {
                "key_code": "escape"
            },
            "to": [
                {
                    "set_variable": {
                        "name": "escape_pressed_2nd",
                        "value": 1
                    }
                },
                {
                    "key_code": "escape"
                }
            ],
            "to_delayed_action": {
                "to_if_canceled": [
                    {
                        "set_variable": {
                            "name": "escape_pressed_2nd",
                            "value": 0
                        }
                    }
                ],
                "to_if_invoked": [
                    {
                        "set_variable": {
                            "name": "escape_pressed_2nd",
                            "value": 0
                        }
                    }
                ]
            },
            "type": "basic"
        },
        {
            "conditions": [
                {
                    "name": "escape_pressed_1st",
                    "type": "variable_if",
                    "value": 0
                }
            ],
            "from": {
                "key_code": "escape"
            },
            "to": [
                {
                    "set_variable": {
                        "name": "escape_pressed_1st",
                        "value": 1
                    }
                },
                {
                    "key_code": "escape"
                }
            ],
            "to_delayed_action": {
                "to_if_canceled": [
                    {
                        "set_variable": {
                            "name": "escape_pressed_1st",
                            "value": 0
                        }
                    }
                ],
                "to_if_invoked": [
                    {
                        "set_variable": {
                            "name": "escape_pressed_1st",
                            "value": 0
                        }
                    }
                ]
            },
            "type": "basic"
        }
    ]
}

Discussion