概要
初めまして。本記事では、ErgodoxをどうしてもJIS環境で使いたい人間が、「JIS配列とUS配列の差異を吸収するマクロを作ればいいのではないか」と気づいてヘッダファイルを作るまでの思考の流れを公開します。開発者のgitリポジトリをダウンロードし、自分でmake
できる人に向けて書いています。この記事でJISキーボードユーザにとっての敷居を少しでも下げることができたら嬉しいです。
デスクトップの様子
上記が僕のErgodox環境です。Ergodox EZを購入し、F,Jキーを突起付きのものに変更しています。見ての通り、JIS配列がデフォルトのノートPCにErgodoxをつないで使っています。
僕のようなユーザは、Ergodoxを使い始めてからしばらくはある大きな問題に悩まされることになります。
刻印と入力がかみ合わない!
OSが、接続されているキーボードがJIS配列であると思い込んだ状態でEUSキーボードを使うと、刻印と入力がかみ合わないという面倒な現象が起こります。例えば"@"を入力したいのに"["が入力されたり、"="を入力したいのに"_"が入力されたりするわけです。(参考:http://www.nagasaki-gaigo.ac.jp/toguchi/pc/multilingual/keyboard_us_jis.htm)
これは、Ergodoxが想定しているユーザー層のUSキーボードと、日本人になじみの深いJISキーボードとで文字の割り当てが異なっていることによる問題です。解決するにはどういった方法があるか考えてみました。
案その1.OSのキーボードの種類を変更する
OSがキーボードの種類を勘違いしていることが原因ですから、正しいキーボードを教えてあげればいいわけです。 http://freesoft.tvbok.com/win10/tips/keyboard.html などを参考にしてキーボードの設定を変更すれば入力が食い違うことはなくなります。
しかし、僕は20年間JISキーボードに慣れ親しんで育ってきているわけです。この積み重ねを無視するわけにはいきません。それに、今度は備え付けのJISキーボードが使えなくなる可能性もあります。
他の方法を考えてみましょう。
案その2.フリーソフトを使って解決する
Windowsならば例えばDvorakJのようなフリーソフトを使うことで、キーボードによって使う配列を変える、という要件を満たせそうな気がします。
DvorakJ は、Windows XP, Windows Vista, Windows 7, Windows 8 で動作する持ち運び可能なキー・リマップ・ソフトです。当初は DvorakJPや高速タイピング JLOD配列 (Japanese Layout on Dvorak)といった Dvorak配列の派生への切り替えに特化していましたが、現在はさまざまなキーボード配列に対応しています。
Macならkanabirarが近いんでしょうか。これでも、一応解決はしそうです。
しかし、我々はErgodoxユーザであるという前提を忘れてはいけません。これだけ柔軟なキーボードを使っていて、外部ソフトウェアに頼るのでは本末転倒だと言えましょう。なんとかErgodox内で完結できないか考えてみます。
案その3.US-JISキーボードの食い違いを理解する
**刻印と入力がかみ合わない!**ことについての理解を掘り下げていきましょう。デフォルトのkeymap.c
では、キートップの刻印の"["の位置にはKC_LBRC
と記述されています。もちろん"]"の位置にはKC_RBRC
です。それぞれ、left-bracketとr-bracketの略でしょう。実際にこのキーを入力すると、JIS環境では
KC_LBRC->"@"キー
KC_RBRC->"["キー
に割り当てられていることが分かります。この調子でKC_XXXと実入力を紐づけていけば、なんとかJIS環境でも使うことができそうですね。Ergodoxだけで完結させたいという、これまでの目標も達成しています。
しかし、この方法は若干保守性が悪いですよね。
「KC_QUOTはJISキーボードの":"キーだな」とか、「"^"を入力したいから、keymap.cにはKC_EQLを記述しよう」というのを毎回やるのはちょっと億劫です。
また、実はこの方法ではどうしても入力できないキーが存在します。それが**「ろ」キーです。番号で言うと0x87**、KC_INT1
あたりに存在するのですが、普通に見つけるのは無理だと思います。
正解:キーコードをJIS向けに再定義しよう!
JIS配列とUS配列には差異があり、定義されたキーコードのずれによるものだと、これまでの調査で分かってきました。この差異は、コンピュータで吸収できないでしょうか。できますよね!
マクロを定義しよう
keycode.h
を確認すると、我々がkeymap.c
で使っているKC_HOGEはすべてそこで定義されているマクロだと分かります。我々も同じことをやればいいわけです。案その3で突き止めたキーコードをマクロに反映していきます。
#define JIS_ATMK KC_LBRC
などと見えるところに書いておけば、"@"はJIS_ATMK
で入力できます。
車輪の再生産はよくない
JIS配列として使いたいユーザー全員が上の作業をするのは明らかにムダですよね。Ergodoxでアップしたはずの生産性をこんなところで無駄遣いするわけにはいきません。誰か一人が調べれば、それは全員で共有できてしかるべきです。
そんなわけで、必要な分の定義をヘッダファイルにまとめました。
sugarAsalt/keymap_JIS
この定義を使うには、Ergodoxユーザであれば、qmk_firmware/keyboards/ergodox/
以下(ergodox.h
やergodox.c
が置いてあるフォルダ)に置き、自身のkeymap.c
の冒頭に#include "keymap_JIS.h"
と書きます。
ついでに僕のキーマップもアップロードしてみました。職場ではMac,家ではwindowsの二重生活なので、どちらでもなるべく同じ使用感になるように調整してあります。
拙文失礼しました。特に混乱を招く記号類は記述した文ですべてだと思うんですが、足りないものがあったら教えていただければ修正もします。
どこかに、qmk_firmwareに同梱されてるDockerfileの使い方を教えてくれるサンタさんは居ないかな~。