解決する課題
- US配列のキーキャップ通りに入力したい
- 変換、無変換キーも使いたい
自作キーボードの悩みの一つに、キーキャップはUS配列だが、OSは日本語配列と認識するため、キーキャップの表示通りに入力できない、というのがある。
OSの設定をUSキーボードにすればいい、と思うかもしれないが、そうすると変換、無変換キーコードが認識されないという別の問題が生じる。 IMEオンオフのために、この2キーは生かしたい。
また、#include "keymap_jp.h"
することで、JP_なんとかキーコードを使ってキーマップをつくれば、単押しのキー入力はキーキャップと入力が一致するものの、シフトキーを押しながら入力する記号が一致しない。
私は、シフトをレイヤーキーにして、シフトキーをおして入力する文字をそのレイヤーに定義しており、だいたいは問題なく使えるが、シフトキーはレイヤー切り替えキーでありシフトキーではないため、単押しでシフトキーとしては機能しない。
解決策
キー入力のたびに、キーコードを変換して送り出す。 シフトキーを押しているかどうかと、変換後の文字がシフトキーを押して出力するキーかどうかは一致しないことがあるため、その点も含めてキー操作を変換する必要がある。 キーマップはKC_キーコードのまま定義することができる。
使い方はtwpair_on_jis.c, twpair_on_jis.hをコピーして、以下の3ヶ所を修正する。
rules.mkに追加
SRC += twpair_on_jis.c
keymap.cに以下を追加
#include "twpair_on_jis.h"
bool process_record_user(uint16_t keycode, keyrecord_t *record) { if (!twpair_on_jis(keycode, record)) return false; return true; }