Win/MacでHHKB(英語配列)のキー操作の統一を考える

WindowsとMacでHHKBを共用するため、キー操作の統一を考える。

# 利用環境
HHKBのモデルはHHKB Professional HYBRID Type-S **英語配列**。今回は以下の3台でHHKBを共用する前提とする。職場のWindowsノートに制約がある。

* 職場のWindowsノート。Microsoft IMEを使用。ルール上、自由に**ソフトウェアをインストールできない**。テレワークで、Macからリモートデスクトップでログインする。また、統合開発環境Eclipseを使用する。
* 自宅のWindowsデスクトップ。Google 日本語入力を使用。自由にソフトウェアのインストールが可能。
* 自宅のMacBook Pro。Google 日本語入力を使用。自由にソフトウェアのインストールが可能。また、ランチャーAlfredを使用。

# 検討結果
Macに合わせて左右の◇ボタンをそれぞれ英数/かなに割り当てたかったが、職場のWindowsノートにAutoHotKey等のソフトウェアのインストールが許可されていない。そのため、以下のような形に落ち着いた。

* IMEオン/オフをCtrl+Spaceに統一。
* コピー&ペースト等のショートカットを(左Cmdキーと左Ctrlキーの混在ではなく)左Ctrlキーに統一。
* ショートカットが衝突するMacの**Spotlight検索は諦め**、Alfredで代替。
* ショートカットが衝突するEclipseのコンテンツ・アシストはShift+Spaceに割り当て。
* HHKBのディップスイッチはWinモードに設定するが、接続先をWin->Macに切り替えた際はFn+Ctrl+MでMacモードに切り替え。Mac->Winに切り替えた際はFn+Ctrl+WでWinモードに切り替え。

# 設定詳細
## HHKB - ディップスイッチ
Winモードに設定するが、接続先切り替えの度にショートカットでWinモード(Fn+Ctrl+W)/Mac モード(Fn+Ctrl+M)を切り替える。SW6はお好みで。

|SW|設定|内容|
|:--|:--|:--|
|SW1|**ON**|Win|
|SW2|OFF||
|SW3|**ON**|Delete='BS'|
|SW4|OFF|Left◇='Left◇'|
|SW5|OFF|◇='◇', Alt='Alt'|
|SW6|**ON**|Power Saving Disabled|

## Windows - Microsoft IME
タスクトレイのアイコンから設定を開き、[キーとタッチのカスタマイズ]-[キーの割り当て]の設定を以下のように変更。

|項目|設定値|
|:--|:----|
|各キーに好みの機能を割り当てる|**オン**|
|Ctrl + Space|**IME-オン/オフ**|

![スクリーンショット 2021-01-22 191127-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/115445/13ec93f7-a369-20ef-907b-8e57a653ce08.png)

## Windows - Google 日本語入力
タスクトレイのアイコンからプロパティを開き、[一般]-[キー設定]-[キー設定の選択]の編集ボタンをクリック。設定を以下のように変更。直接入力は複数あるが、デフォルト設定なら原則Zenkaku/Hankakuを置き換えていけば良い。

|モード|入力キー|コマンド|
|:----|:-----|:------|
|変換前入力中|**Ctrl Space**|IME を無効化|
|変換中|**Ctrl Space**|IME を無効化|
|入力文字なし|**Ctrl Space**|IME を無効化|
|直接入力|**Ctrl Space**|IME を有効化|

![スクリーンショット 2021-01-22 190938-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/115445/6b3c7f41-2014-d138-024e-e935620ec0b8.png)

## Windows - Eclipse
[ウィンドウ]-[設定]を開き、[キー]の設定を以下のように変更。

|コマンド|バインディング|
|:------|:----------|
|コンテンツ・アシスト|**Shift+Space**|

## Mac - Karabiner-Elements
[Karabiner-Elements](https://karabiner-elements.pqrs.org/)をインストールし、左Ctrlキーと左Cmdキーの入れ替えを行う。但し、リモートデスクトップも含めてしまうと、リモートデスクトップでのコピー&ペーストが◇ボタンとなってしまう。そのため、リモートデスクトップは対象から除外する。
~/.config/karabiner/assets/complex_modifications/配下に以下のファイルを作成後、Karabiner-Elementsを起動し、Complex modificationsから設定を行う。
`product_id`はHHKBのモデルに合わせて書き換えること。

```json:hhkb.json
{
    "title": "For HHKB",
    "rules": [
        {
            "description": "Change left_command to left_control for HHKB. (Except RDC)",
            "manipulators": [
                {
                    "type": "basic",
                    "from": {
                        "key_code": "left_command"
                    },
                    "to": {
                        "key_code": "left_control"
                    },
                    "conditions": [
                        {
                            "type": "device_if",
                            "identifiers": [
                                {
                                    "vendor_id": 1278,
                                    "product_id": 33
                                }
                            ]
                        },
                        {
                            "type": "frontmost_application_unless",
                            "bundle_identifiers": [
                                "^com\\.microsoft\\.rdc\\.macos$"
                            ]
                        }
                    ]
                }
            ]
        },
        {
            "description": "Change left_control to left_command for HHKB. (Except RDC)",
            "manipulators": [
                {
                    "type": "basic",
                    "from": {
                        "key_code": "left_control"
                    },
                    "to": {
                        "key_code": "left_command"
                    },
                    "conditions": [
                        {
                            "type": "device_if",
                            "identifiers": [
                                {
                                    "vendor_id": 1278,
                                    "product_id": 33
                                }
                            ]
                        },
                        {
                            "type": "frontmost_application_unless",
                            "bundle_identifiers": [
                                "^com\\.microsoft\\.rdc\\.macos$"
                            ]
                        }
                    ]
                }
            ]
        }
    ]
}
```