[mac]ErgoDox EZにfnキーを割り当てる
ErgoDox EZのキーカスタマイズをしていたところ、「そういえばfnキーがない」ということに気が付きました。
普段 fn + F1 でディスプレイの明るさ調整を行っていたので、fnキーも割り当てたいと思い調べてみたところ、
Apple/Mac keyboard Fn Not supported.
とのことでした。
macbookの場合、「明るさ調整の場合だけ内蔵キーボードを使う」という風にすればそれでもよかったのですが、せっかくなので色々調べてみたところ、「Karabiner」と「Seil」を使うことでfnキーを割り当てることができました。
今書いておかないとすぐ忘れてしまうのと、キーボードに慣れる練習を兼ねてやり方を残しておきます。
結構手間のかかるやり方になっているのでもっと良い方法をご存じの方がいらっしゃればアドバイスいただけますとうれしいです。
対応方法
やることとしては「 SeilでCapsLockをF19キーに割り当て、KarabinerでF19キーをfnに割り当てる 」ことをします。
直接CapsLockをfnに割り当てていないのは「 通常キーボードの場合はCapsLockはcontrolとして割り当て、ErgoDox EZの場合のみfnとして割り当てる 」というのを実現したかったからです。
1. CapsLockを無効化
「システム環境設定」 => 「キーボード」 => 「修飾キー」 で全てのキーボードのCapsLockを「アクションなし」に設定します。
2. SeilでCapsLockのキーコードをF19に変更
Seilを起動してCapsLockのキーコードを 80番(F19) に設定します。
3. ErgoDox EZのvendoridとproductidを調べる
SeilのFAQにある「caps lockを特定のキーボードでのみ変更するには?」を参考に設定していきます。
ErgoDox EZのvendoridとproductidを調べるにはKarabinerインストール時に付いてくる「 EventViewer 」というアプリを起動します。
「Devices」タブを開くと各キーボード等のvendoridとproductidが表示されているのでメモしておきます。
4. private.xmlの編集
Karabinerの設定画面を開いて「Open private.xml」を選択。
private.xmlを開いて、以下を入力します。(vendoridとproductidは先ほどメモしたものに置き換えて下さい)
<devicevendordef>
<vendorname>My_Keyboard_VendorID</vendorname>
<!-- *** Replace this value with yours. *** -->
<vendorid>0xXXXX</vendorid>
</devicevendordef>
<deviceproductdef>
<productname>My_Target_Keyboard_ProductID</productname>
<!-- *** Replace this value with yours. *** -->
<productid>0xXXXX</productid>
</deviceproductdef>
<item>
<name>Change f19 key to function key</name>
<appendix>(Change f19 key to caps lock key in internal keyboard.)</appendix>
<identifier>private.f19_hack</identifier>
<block>
<!-- change f19 key to function key -->
<device_only>
DeviceVendor::My_Keyboard_VendorID,
DeviceProduct::My_Target_Keyboard_ProductID
</device_only>
<autogen>__KeyToKey__ KeyCode::F19, KeyCode::FN</autogen>
</block>
<block>
<!-- change f19 key to control key in other devices -->
<autogen>__KeyToKey__ KeyCode::F19, KeyCode::CONTROL_L</autogen>
</block>
</item>
ファイルの保存後に「Reload XML」を実行すると上記の設定が追加されているので、チェックを入れます。
5. fnキーとの組み合わせの設定
最後にfn + F1で明るさ調整ができるように設定を切り替えます。
以下のようにKarabinerの「Change F1..F19 Key」の設定にチェックを入れます。
これでCapsLockをfnキーとして使うことができるようになりました。
もちろんErgoDox EZ以外のキーボードではこれまでどおりcontrolとして使えています。
ErgoDoxのキーマップに関しては、Symbol Layerの空いている場所にCapsLockを割り当てて使うようにしています。
qmk_firmware/keymap.c at ergodox_ez/hilotter · hilotter/qmk_firmware · GitHub
まとめ
Karabinerすごい