天高工房

キーキャップに印字して遊んだり電子工作して遊んだりしたことを書くかもしれません。

【QMK】JPキーコードでキーマップを定義する

とりあえず書いた。

三行

  • 基本のキーコードはANSI準拠で定義されている
  • キーコード自体は共通だけど、OSのキーボード設定次第で同じキーコードでも実際に入力される文字/記号が変わる(だいたい同じ位置なら同じキーコードが発行される)
  • JPでキーマップを定義したい場合は#include"keymap_jp.h"を追加することでJP_XXで定義でき、キーマップ定義と入力記号を一致させることができる

詳しく

USB HIDのキーボードのキーコードはいわゆるANSIと同じ組み合わせで定義されています。標準はANSIと同じ組み合わせです。

キーコードの解釈はOS側に任されているようで、「どの種類のキーボードが認識されているか」によってキーコードが変わります。ANSIを指してもOS側に今接続しているのはJPだと言い張ればGraveは半角全角になります。逆もまた然りです。

JPとANSIと見比べて、同じ位置にあるキーは同じキーコードを発行するようになっていますので、基本的にはANSIをそのままコピーすれば大体JPとして動いてくれます。

ただし、いくつかANSIにないキーがあります。具体的にはJPの「ろ」「_\」、「|\」と、変換、無変換、カタカナひらがなです。これらはANSIには存在しません。ISOだと存在する場合もあるようです。これらには、INT1~INT5が割り当てられています(順不同)。InternationalのINTのようなので、国別の独自追加キー用のものなのでしょう。

さらに、MacOSのかなと英数は別のキーコードが割り振られています。LANG1とLANG2です。Ergodoxが来るまではMacユーザーがあまりいなかったのか動作しなかったようですがmhidakaさんなどのご尽力により動作するようになったようです。

で、国別の変更点を吸収したいという要求は強いようで、quantum/keymaps_extra/以下にkeymap_jp.hなど、各言語用にQMKキーコードをリマップした定義が用意されています。通常KC_XXで定義するところをJP_XXで定義することができるようになります。

github.com

内容を見ればわかりますが JP->KCにリマップしているだけなので特に問題は出ません。

参考資料

JPの記号とUsage Nameとスキャンコードの対照表

USBキーボードのキーコード

この後にこの記事書いたことを忘れて別に書いたJPキーコードチートシート記事

skyhigh-works.hatenablog.com

追記

  • 一部表現を修正しました。
  • JISなんて存在しないと悟ったのでJPに表記を変更しました。