EmacsキーバインドをKeyball44に実装
Emacsキーバインドをハードウェアで実現したかったのが自作キーボードのきっかけのひとつでした。以下のキーをおおむねEmacsキーバインドに従って配置しています。(一部はEmacs関係なくLinuxで普通なキーバインドが混ざっているかも)
カーソル移動
上: Ctrl+P
下: Ctrl+N
PageDown: Ctrl+V
PageUp: Alt+V
Home: Ctrl+A
End: Ctrl+E
テキスト選択: Ctrl+Space のあとにカーソル移動
クリップボード
Copy: Alt+W
Cut: Ctrl+W
Paste: Ctrl+Y
編集系特殊キー
Enter: Ctrl+M
Backspace: Ctrl+H
Del: Ctrl+D
Escape: Ctrl+G
Tab: Ctrl+I
そのほか特殊キー
検索(Ctrl+F): Ctrl+S
保存(Ctrl+S): Ctrl+J S
もとに戻す(Ctrl+Z): Ctrl+J U
VSCodeで別の編集ペインに移動: Ctrl+J O
VSCodeでカーソルが中央になるようにスクロール: Ctrl+L
「おおむね」と言ったのは2ストロークの操作(保存、もとに戻す、VSCodeで別の編集ペインに移動)の1ストローク目だけ違っているためです。Emacsでは1ストローク目がCtrl+Xですが、Keyball44ではCtrl+Xを押すのが困難だったため、Ctrl+Jに変更しました。
Keyball44でCtrl+Xが押しづらい理由は、CtrlとXが近すぎるためです。今までは左手を少し左に寄せて小指でCtrl、人差し指でXを押してました。今まで使っていた標準のキーボードでは、Ctrl(CapsLockをCtrlにしていた)が2Uぐらいの大きさ(横長)で、かつロウスタッガードのためXが右にずれていることでCtrlとXに距離があったためにそのような運指だったのかもしれません。Keyball44ではCtrlが1Uの大きさしかなく、カラムスタッガードのためXがSと横位置が同じため、いままでの運指ができなくなったのかもしれません。Ctrl押しながらで空いている場所で押しやすい場所を探したらCtrl+Jになりました。Ctrl+Jのあとの2ストローク目はCtrl押しながらでも離してしまってもどちらでも機能します。
カーソル移動の左右はEmacsキーバインドの例外になっています。カーソル右キーはEmacsキーバインドのCtrl+Fのほかに Ctrl+< にも重複して割り当てています。カーソル左キーはEmacsキーバインドであるCtrl+Bには配置せずに Ctrl+> に割り当てています。その経緯は前回の記事に書きました。
「VSCodeで別の編集ペインに移動」はVSCodeで「Focus Next Editor Group」コマンドに適当なショートカットを設定し、Ctrl+J Oを押すとKeyball44からはそのショートカットキーを送信するようにしています。
「VSCodeでカーソルが中央になるようにスクロール」はVSCodeにCenter Editor Windowというプラグインを入れることで実現しました。Ctrl+Lを押すとKeyball44からはそのままCtrl+Lというキーコードを送信しています。
CtrlレイヤーとAltレイヤーのうちEmacsキーバインドで使わない部分は、Emacsと関係なく必要な記号やショートカットなどを割り当てています。
ちなみに、これらのキーマップは最初のうちはRemapで設定していたのですが、ファームウェアでカスタマイズする範囲が広がるにつれてRemapとファームウェアを使い分けるのが面倒になってきたため、途中からRemapを使わずにすべてファームウェアにキーマップを書くようになりました。QMK Firmwareでキーマップやカスタマイズ処理を自由に書くようになりRemapを使わなくなると、QMK FirmwareからVIAのサポートを削除できます。すると、ファームウェアのサイズを大幅に削減でき、複雑なカスタマイズを多く書けるようになります。これはとても便利です。Keyball44制作前はRemapを使えるようにあることを楽しみにしていたのに、予想に反して1か月経たずに使わなくなってしまいました。Keyball44制作直後のファームウェアのカスタマイズに慣れる前はRemapがないとKeyball44を使うことができなかったので、Remapに感謝はしています。