キーボード
マウス
karabiner-Elements

Karabiner-Elementsでキーボードのアローキーをマウスにしてみた

はじめに

Karabiner時代にキーボードをマウスにして喜んでいたのですが、macOSをHigh Sierraにして使えなくなって絶望しました。
しかし、最近Karabiner-ElementsのComplex Modificationsが熱いというのを耳にして調べてみると、なんだかマウスが実装できそう!

ということで、オリジナルJsonファイル作ってみました。

機能

  • アローキーでポインタを操作
  • アンダーバーで左クリック
  • シフトキーで右クリック
  • シフトキーを押しながらアンダーバーを押すことでマウス機能オンオフのトグル

こんな感じです。

ソースコード

{
    "title": "Key-Mouse Rules",
    "rules": [
        {
            "description": "Use mouse pointing by ←↑→↓",
            "manipulators": [
                {
                    "description": "turn on Key-Mouse",
                    "from": { "key_code": "international1" },
                    "to": [ { "set_variable": { "name": "key_mouse_state", "value": 1 } } ],
                    "conditions": [
                        { "type": "variable_if", "name": "key_mouse_state", "value": 0 },
                        { "type": "variable_if", "name": "right_shift_down", "value": 1 }
                    ],
                    "type": "basic"
                },
                {
                    "description": "turn off Key-Mouse",
                    "from": { "key_code": "international1" },
                    "to": [ {
                        "set_variable": { "name": "international1_down", "value": 1 },
                        "set_variable": { "name": "key_mouse_state", "value": 0 } }
                    ],
                    "conditions": [
                        { "type": "variable_if", "name": "key_mouse_state", "value": 1 },
                        { "type": "variable_if", "name": "right_shift_down", "value": 1 }
                    ],
                    "type": "basic"
                },
                {
                    "description": "_ -> left click",
                    "from": { "key_code": "international1" },
                    "to_if_alone": [ { "pointing_button": "button1" } ],
                    "conditions": [
                        { "type": "variable_if", "name": "key_mouse_state", "value": 1 },
                        { "type": "variable_if", "name": "right_shift_down", "value": 0 }
                    ],
                    "type": "basic"
                },
                {
                    "description": "right shift -> right click",
                    "from": { "key_code": "right_shift" },
                    "to_if_alone": [ { "pointing_button": "button2" } ],
                    "to": [ { "set_variable": { "name": "right_shift_down", "value": 1 } } ],
                    "to_after_key_up": [ { "set_variable": { "name": "right_shift_down", "value": 0 } } ],
                    "conditions": [ { "type": "variable_if", "name": "key_mouse_state", "value": 1 } ],
                    "type": "basic"
                },
                {
                    "description": "right shift -> right click",
                    "from": { "key_code": "right_shift" },
                    "to": [ { "set_variable": { "name": "right_shift_down", "value": 1 } } ],
                    "to_after_key_up": [ { "set_variable": { "name": "right_shift_down", "value": 0 } } ],
                    "conditions": [ { "type": "variable_if", "name": "key_mouse_state", "value": 0 } ],
                    "type": "basic"
                },
                {
                    "description": "← -> mouse left",
                    "from": { "key_code": "left_arrow" },
                    "to": [ { "mouse_key": { "x": -1800 } } ],
                    "conditions": [ { "type": "variable_if", "name": "key_mouse_state", "value": 1 } ],
                    "type": "basic"
                },
                {
                    "description": "↑ -> mouse up",
                    "from": { "key_code": "up_arrow" },
                    "to": [ { "mouse_key": { "y": -1800 } } ],
                    "conditions": [ { "type": "variable_if", "name": "key_mouse_state", "value": 1 } ],
                    "type": "basic"
                },
                {
                    "description": "→ -> mouse right",
                    "from": { "key_code": "right_arrow" },
                    "to": [ { "mouse_key": { "x": 1800 } } ],
                    "conditions": [ { "type": "variable_if", "name": "key_mouse_state", "value": 1 } ],
                    "type": "basic"
                },
                {
                    "description": "↓ -> mouse down",
                    "from": { "key_code": "down_arrow" },
                    "to": [ { "mouse_key": { "y": 1800 } } ],
                    "conditions": [ { "type": "variable_if", "name": "key_mouse_state", "value": 1 } ],
                    "type": "basic"
                }
            ]
        }
    ]
}

パラメータの1800の数字を変えればポインタ移動のスピードを変えられます。
スクロールはmacに元からあるスペースキーのやつでできるので省きました。

苦労

conditionsの仕様に大変苦労させられました。シフトキーとアンダーバーを同時した時に機能をトグルして、単品で押した時はそれぞれの機能という風にするの厄介ですね。
また、任意のキーを長押しで機能のトグルを行いたかったのですが、できませんでした。いい方法ありませんかね。

おわりに

Karabiner-Elements素晴らしいですね。開発陣あっぱれです。
これからも素敵なKarabinerライフを送りたいです。