HHKBでWin/Macそれぞれのモードにキーマップを設定し保存する

## これまでのHHKBの使い方

[HHKB Professional HYBRID Type-S](https://happyhackingkb.com/jp/products/hybrid_types/)(以下TypeS)を3年近く使ってます。それまで２年半ほど使っていた[HHKB Professional BT](https://happyhackingkb.com/jp/products/discontinued/hhkb_probt/)(以下BT)からの買い足しでした。以前[HHKB Lite2](https://happyhackingkb.com/jp/products/discontinued/hhkb_lite2/)を使っていた頃もありますが、本格的に使い始めたのはBTからです。

現在、メインは会社のWindowsノートでTypeSを使用、自宅のmac miniにBTを使用しています。
BTをメインで使っていた頃からWindowsではDIPスイッチの設定は`011111`でした(左からSW1~6、 1:ON)。これはMacモードなのですけど、音量調整やミュートのキーがアサインされているという理由でそうしていました。(最近の？)Windowsでも音量調整やミュートのキーは使えるので。(`Eject`キーは使えたか自信無いです)
他はWindowsで使い勝手のいいように変更していたので、mac miniで使うようになってBTのDIPスイッチは`011001`に変更して使っています。

### HHKBのDIPスイッチで選択可能なモード

Happy Hacking Keyboard Professional HYBRID（英語配列 / 無刻印）取扱説明書より。
- 他機種でも概ね同じ意味だと思いますが、詳しくは https://happyhackingkb.com/jp/download/ から入手可能なマニュアルを参照してください。

|SW1|SW2|設定モード|
|:--|:--|:-------|
|ON|OFF|Winモード|
|OFF|ON|Macモード|
|OFF|OFF|HHKモード|
|ON|ON|設定禁止|

### HHKBのDIPスイッチで設定できる機能

Happy Hacking Keyboard Professional HYBRID（英語配列 / 無刻印）取扱説明書より。
- 他機種でも概ね同じ意味だと思いますが、詳しくは https://happyhackingkb.com/jp/download/ から入手可能なマニュアルを参照してください。

|DIPスイッチ|状態|キー|機能|
|:----|:----:|:----:|:----|
|SW3|OFF|Delete|Delete|
||ON|Delete|BS (Back Space)|
|SW4|OFF|左 ◇|左 ◇|
||ON|左 ◇|Fn|
|SW5|OFF|Alt<br>◇|Alt<br>◇|
||ON|Alt<br>◇|◇<br>Alt|
|SW6|OFF|-|省電力有効|
||ON|-|省電力無効|

SW1, 2はWin/Macモードの切替なので、WindowsとMacで使用している設定で実質的な違いは左`Alt`を`Fn`にするかと、`Alt`と`◇`(`Windows`キーまたは`Command`キー)をスワップするかどうかです。

Windowsでは、カーソルキーや`Home`, `End`キーを使う機会が多いのでSW4 ONで使用しています。MacだとEmacsライクなキーバインドが使えてあまり必要ないんですけど。
これまでは基本的に会社のWindowsでTypeS、自宅のmac miniでBTという独立した使い方で、それぞれDIPスイッチで設定できるキーマップで使用していて特に不自由は感じていませんでした。
TypeSではアプリでキーマップの変更が可能な事は知っていましたが、このような理由とキーマップはひとつしか保存できないと思っていたので、一度少し試しただけでDIPスイッチ以上の設定変更はしていませんでした。

## でもやっぱりWindowsとMac両方で使いたくなって

コロナ以降、在宅で仕事をする機会が増えてきました。比較的コンパクトなHHKBでも机の上に２個置くと場所をとります。仕事を始める前にBTからTypeSに置き換えて、仕事が終わったら元に戻すのも面倒です。それでも仕方ないかと暫くはやり過ごしていましたが、ふと ["HHKB Windows Mac 併用" などと検索](https://www.google.com/search?client=firefox-b-d&q=HHKB+Windows+Mac+%E4%BD%B5%E7%94%A8)してみて…

- WinモードとMacモードは、ショートカットキーで切替可能  
    - `Fn` + `Control` + `w` ... Winモード
    - `Fn` + `Control` + `m` ... Macモード
    - ショートカットキーで切り替えたモードは電源オフまで有効、次回起動時はDIPスイッチ設定のモード
- **Win/Macそれぞれのモードでキーマップを保存可能**

…らしいことを今更ながら改めて知り「え！それ便利やん！」と、設定してみました。
ショートカットキーでのモード切替は頭の片隅にあったようななかったような…で、確かに取扱説明書に記載があるんですが全く活用していませんでした。
それぞれのモードでキーマップを保存可能というのはキーマップ変更ツールのヘルプ等を見ても、自分が読む限り記載されていないようでした。

因みに下記組み合わせで確認しています。どちらも https://happyhackingkb.com/jp/download/ からダウンロードできます。きっとWindows版キーマップ変更ツールでも同様かと思います。

- Happy Hacking Keyboardキーマップ変更ツール  
  - macOS v1.2.0
    2022-11-01追記： Type-S 雪では v1.3.0 以降でないと認識しないようで、v1.3.0でも確認済みです。
- Happy Hacking Keyboardファームウェア
  - HYBRID Type-S / HYBRID（英語配列 / 無刻印） A0.46 (2020/05/28更新)

## 設定方法

設定は特に難しいことはありません。DIPスイッチをWinモード、Macモードそれぞれに設定した状態でキーマップ変更ツールを用いて好みのキーマップを設定し、HHKBに書き込むだけです。
あとはショートカットキーでWin/Macモードを切り替えることで、いちいち電源を落としてDIPスイッチを変更することなく、それぞれのモードで保存したキーマップを有効にできます。
(もしかしたら、もうひとつのHHKモードにも別のキーマップを保存できるのでしょうか？？試せていませんが。ただ、HHKモード切り替え専用のショートカットキーは無いようでDIPスイッチによりWinモードと共用となるようです。)

キーマップ変更ツール使用時の注意点としては…

- HHKBの電源を落としてDIPスイッチを変更(Win/Macモード変更含む)、再接続した場合は、キーマップ変更ツールも起動し直さないとDIPスイッチの状態が読み込まれないようです。
- DIPスイッチで設定されているモードから、ショートカットキーでモード変更されている場合は、キーマップ変更ツール側で警告が表示され使用できないようです。

…等でしょうか。

前述の検索結果を見ると、WindowsとMacの標準的なショートカットキーの違いを吸収するために、Mac側で`Command`キーを`Control`キーと入れ替えるという方がおられるようでしたが、自分はWindowsとMacのショートカットキーで特に混乱することもないので、そのままです。変に弄ると逆に分からなくなりそうです。Macでも結構`Control`キー使いますし。

### 実際の設定例

- "Happy Hacking Keyboard キーマップ変更ツール"を使ったTypeSの設定例です。
- DIPスイッチ設定は、これまでTypeSで使用していた`011111`をベースとしています。

#### Windows用設定

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264719/25876c44-0787-33c9-16e7-e390e9d47519.png" width="300px">

- 事前に、DIPスイッチ設定を元のMacモードからをWinモードに変更済み(SW1, 2のみ変更)
- MacモードにあってWinモードにない音量関係と`Eject`キーを追加(`Fn`キー同時押し)  
  `Eject`キー使えるかは未確認

#### Mac用設定

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264719/078ca661-b8c0-4489-94cc-64873ca919e3.png" width="300px">

- 事前に、DIPスイッチ設定をWinモードからをMacモードに変更(SW1, 2のみ変更)
- Windows用設定から`Alt`キー、`◇`(`Command`)キーを元の位置に

Mac用キーマップは、ほぼデフォルトに戻しているだけです。この辺はベースになるDIPスイッチ設定によるんだと思います。
TypeSをメインで使用するのが会社のWindowsノートなので、設定完了後、DIPスイッチはWindows用設定の状態に戻してあります。

## 最後に

HHKBの接続先やモードを切り替える際のショートカットキーは、`Fn`キー押しつつ`Control`キーも押したまま`1`キーを押す…みたいに少し時間差を意識するように入力すると確実に機能するようです。
当初、全キー同時入力で上手く切り替わらないことがありストレスを感じていましたが、今はこうすることで問題なく切り替えられています。

今回行った設定により、ショートカットキーでWindows、MacへのHHKB接続切り替え、且つキーマップ切り替えもできるようになり、以前に比べ快適な環境を構築できました。
…が、欲も出てきました(笑)。現在、Windows、Mac間で接続先を切り替える際は…

- Windows → Mac
    - `Fn`+`Control`+`2` (接続先切り替え)
    - `Fn`+`Control`+`m` (キーマップ切り替え)
- Mac → Windows
    - `Fn`+`Control`+`1` (接続先切り替え)
    - `Fn`+`Control`+`w` (キーマップ切り替え)

…と、いう風に２ステップ必要なのです。
接続先毎に、どちらのキーマップをデフォルトで使用するか設定できれば便利なのになーと、思ってしまいました。個人的には接続先の番号固定で奇数はWin(またはHHK)、偶数はMacとかでもよいですが、それだと困る方もいると思うので、キーマップ変更ツールでファームウェアに保存できるようになればいいんでしょうかね。

あと、HHKBの取扱説明書を読むと「Mac モードの場合、SW3 は無効です」と明記されていますが、Macモードでも`Delete`キーを`Back Space`キーとして使えてると思うんです。BTでもTypeSでも。どうしてだろ。

## 編集履歴
- 2022-11-01: Type-S 雪ではキーマップ変更ツールを v1.3.0 にアップデートしないと認識されないことを[追記](#でもやっぱりwindowsとmac両方で使いたくなって)しました。
- 2022-11-06: タイトル更新しました。