KMK FirmwareでJP配列のキーマップを作る—Windows日本語環境で自作キーボードを簡単に使うための小ネタ—

2021年も残すところあと3日、昨年の今頃何やってたかなと振り返ってみたところ、100円のLEDランタンに1/fゆらぎ化改造を施していました。

www.creativity-ape.com

このギミックは自分的になかなか気に入っているので、"Lチカ"ならぬ"Lユラ"関係も今後もう少し掘り下げてみたいです。

こうやって自分の行いを振り返れるのは、ブログを続けるメリットの一つだなと思います。

f:id:at_you_key:20211228172032j:plain

さて、自作キーボードのファームウェアは、大抵USキーボードのキーコードを出すようになっていて、日本語環境で使おうとした時、たとえば"["を設定したはずが"@"になったりしてしまいます。

QMK Firmwareの場合は対策方法があるんですが、僕はQMKのビルド環境立ち上げに挫折したので、この記事のように力技で対応しました...。

www.creativity-ape.com

今日は、「自作キーボード日本語配列で使いたい問題」の別解をご紹介します。

はじめに

しばらく前にPiPiGherkinをビルドしてからというもの、CircuitPythonベースのキーボードファームウェア「KMK Firmware」がマイブームです。

www.creativity-ape.com

KMKのメリットはなんといっても、テキストエディターさえあれば、簡単にファームウェアを書き換えられることでしょう。QMKに挫折した僕のような人にはまさに福音!

あと、HIDとして動きながら、標準出力をシリアルコンソールに出せるのも大きなメリットです。よくわからない動きをしたときに、簡単にトライ&エラーできるのが最高です。

まずはQMKからKeymap_jp.cを移植しようとした

上で紹介した記事の通り、QMKにはすでに日本語配列に対応するための仕掛けが取り込まれています。Keymap_jp.cをインクルードして、キーマップの頭に「JP_」を付けて設定すると、日本語配列相当のキーマップになるというものです。

さっそくPythonに書き換えて、見様見真似でGitHubのプルリクを出してみたところ、「冗長だから見直してくれない?」というコメントが付きました。

github.com

なるほど、Cだったらコンパイル時に使ってない変数は無視されますが、CircuitPythonの場合スクリプトをマイコン内に置くので容量を圧迫するし、インポートすればメモリーもムダに消費してよくないです。

ここで考えついた解決手段は2つです。

  • ① なにかすごいエレガントな技をつかう
  • ② 元のキーコードをむりやり書き替える

残念ながら僕のプログラミング能力では①は無理なので、②で行くことにしました。

メリットは単純でわかりやすいこと、デメリットは書き替えの順番を気をつけないと、キーコードが崩壊するってことです。

テセウスのKeymap_jp

そうと決まれば話は簡単です、冗長なキーコードを削減して、KC.AT = KC.LBRCみたいに、直接キーコードを書き替えるように変更しました。ここまで来ると、残ったのはファイル名だけ、まるでテセウスの船です。

KMKにマージされた!

そうしてプルリクを出し直してみた結果、こんどは無事マージしてもらうことができました、よかった!

github.com

How to use ?

使い方はかんたん、このように、code.pyのKCインポート後に一行追加して、あとは普通にキーマップを定義するだけです👌

from kmk.keys import KC
 
import kmk.extensions.keymap_extras.keymap_jp

それでは、今年はここまで。良いお年をお迎えください🎍