USキーボードをJIS設定で使う

解決する課題

  • US配列のキーキャップ通りに入力したい
  • 変換、無変換キーも使いたい

自作キーボードの悩みの一つに、キーキャップはUS配列だが、OSは日本語配列と認識するため、キーキャップの表示通りに入力できない、というのがある。

OSの設定をUSキーボードにすればいい、と思うかもしれないが、そうすると変換、無変換キーコードが認識されないという別の問題が生じる。 IMEオンオフのために、この2キーは生かしたい。

また、#include "keymap_jp.h"することで、JP_なんとかキーコードを使ってキーマップをつくれば、単押しのキー入力はキーキャップと入力が一致するものの、シフトキーを押しながら入力する記号が一致しない。

私は、シフトをレイヤーキーにして、シフトキーをおして入力する文字をそのレイヤーに定義しており、だいたいは問題なく使えるが、シフトキーはレイヤー切り替えキーでありシフトキーではないため、単押しでシフトキーとしては機能しない。

解決策

github.com

キー入力のたびに、キーコードを変換して送り出す。 シフトキーを押しているかどうかと、変換後の文字がシフトキーを押して出力するキーかどうかは一致しないことがあるため、その点も含めてキー操作を変換する必要がある。 キーマップは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;
}