一般的なキーボードでHHKB風の矢印キー操作をKarabiner-Elementsで実現する方法

## HHKBから一般的なキーボードへ移行した際の課題
打鍵音を求めて HHKB（US配列）から ゲーミングキーボード（US配列）に移行したのだが、独立した矢印キーに慣れない。独立した矢印キーが無い点を問題視されがちな HHKBのUS配列だが、手が覚えてしまえば使いやすいのだ。

一応、Karabiner Elements には探せば `Change right_cmd + hjkl to arrow keys` という便利な `Complex Modifications` が用意されており、これはこれで便利なのだが、どうしても時折 `Fn` + `[` `;` `'` `/` に手が伸びてしまう。

## Karabiner-Elementsを用いた解決策
割と似た打鍵感を求めて、`right_shift` + (`p` `l` `;` `.`) or (`o`, `k`, `l`, `,`) を設定してみたら悪くなかった。どちらの形式が手に馴染むかは好みの差といったところか。。

**[`pl;.`形式]**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/375665/bd29aac6-f275-43fa-9860-c0a3f52348ef.png)

**[`okl,`形式]**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/375665/a72de594-e532-46fa-903e-b96b06efe97d.png)



実現するには、`Complex Modifications` の `add your own rule` に以下の設定をいれる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/375665/eb0c99f5-b6e0-43f8-b087-1584cfc44c01.png)

**[`pl;.`形式]**
```json
{
    "description": "HHKB like arrow operations",
    "manipulators": [
        {
            "from": {
                "key_code": "p",
                "modifiers": {
                    "mandatory": ["right_shift"],
                    "optional": ["any"]
                }
            },
            "to": [
                {
                    "key_code": "up_arrow",
                    "modifiers": []
                }
            ],
            "type": "basic"
        },
        {
            "from": {
                "key_code": "l",
                "modifiers": {
                    "mandatory": ["right_shift"],
                    "optional": ["any"]
                }
            },
            "to": [
                {
                    "key_code": "left_arrow",
                    "modifiers": []
                }
            ],
            "type": "basic"
        },
        {
            "from": {
                "key_code": "semicolon",
                "modifiers": {
                    "mandatory": ["right_shift"],
                    "optional": ["any"]
                }
            },
            "to": [
                {
                    "key_code": "right_arrow",
                    "modifiers": []
                }
            ],
            "type": "basic"
        },
        {
            "from": {
                "key_code": "period",
                "modifiers": {
                    "mandatory": ["right_shift"],
                    "optional": ["any"]
                }
            },
            "to": [
                {
                    "key_code": "down_arrow",
                    "modifiers": []
                }
            ],
            "type": "basic"
        }
    ]
}
```

**[`okl,`形式]**
```json
{
    "description": "HHKB like arrow operations",
    "manipulators": [
        {
            "from": {
                "key_code": "o",
                "modifiers": {
                    "mandatory": ["right_shift"],
                    "optional": ["any"]
                }
            },
            "to": [
                {
                    "key_code": "up_arrow",
                    "modifiers": []
                }
            ],
            "type": "basic"
        },
        {
            "from": {
                "key_code": "k",
                "modifiers": {
                    "mandatory": ["right_shift"],
                    "optional": ["any"]
                }
            },
            "to": [
                {
                    "key_code": "left_arrow",
                    "modifiers": []
                }
            ],
            "type": "basic"
        },
        {
            "from": {
                "key_code": "l",
                "modifiers": {
                    "mandatory": ["right_shift"],
                    "optional": ["any"]
                }
            },
            "to": [
                {
                    "key_code": "right_arrow",
                    "modifiers": []
                }
            ],
            "type": "basic"
        },
        {
            "from": {
                "key_code": "comma",
                "modifiers": {
                    "mandatory": ["right_shift"],
                    "optional": ["any"]
                }
            },
            "to": [
                {
                    "key_code": "down_arrow",
                    "modifiers": []
                }
            ],
            "type": "basic"
        }
    ]
}
```

## まとめ
Karabiner-Elements のカスタム機能が強力で助かった。打鍵音が気に入った Gaming キーボードを使い慣れた HHKBの感覚に近づけることができた。

「パンが無いなら自分で焼けばいいじゃない」

終わり