概要
Keebio の自作キーボードキット Iris を QMK Firmware でカスタマイズして使っています。
macOS では Mac の日本語キーボードのように、左右の親指キーに IME のオン・オフ (LANG1, LANG2) を割り当てることで、トグル無しに快適な日本語切り替えができます。しかし、Windows では英字キーボードに設定するとこれらのキーが認識されないため、仕方なく Ctrl+Space で切り替えるようにしていました。
対処法としては、日本語配列を英字配列風にカスタマイズする方法、AX 配列をインストールする方法など色々あるようですが、今回はなるべく環境をいじらないで実現できる方法として、英字配列でも認識される F12 以降のファンクションキーを LANG1, LANG2 と同時に送信するようにファームウェアの書き換えを行います。
事前準備
QMK Firmware のリポジトリを clone してセットアップを行います。方法は公式のドキュメントをどうぞ。
キーマップを作る
keyboards/keebio/iris/keymaps/default
などの元にする設定のディレクトリをコピーし、適当な名前をつけます (本記事では keyboards/keebio/iris/keymaps/ryohey
ディレクトリ)
設定方法
コードはこちら
https://github.com/ryohey/qmk_firmware/commit/deb4e582ec660ec692c019bebce798e725b24bc0
keymap.c にカスタムキーコード IMEON
、IMEOFF
を追加し、キーマップに指定します。
enum custom_keycodes {
QWERTY = SAFE_RANGE,
LOWER,
RAISE,
ADJUST,
IMEON,
IMEOFF,
};
#define KC_IMEON IMEON
#define KC_IMEOFF IMEOFF
[_QWERTY] = LAYOUT_kc(
//,----+----+----+----+----+----. ,----+----+----+----+----+----.
ESC , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,BSPC,
//|----+----+----+----+----+----| |----+----+----+----+----+----|
TAB , Q , W , E , R , T , Y , U , I , O , P , ,
//|----+----+----+----+----+----| |----+----+----+----+----+----|
LCTL, A , S , D , F , G , H , J , K , L ,SCLN,ENT,
//|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
LSFT, Z , X , C , V , B ,IMEOFF, IMEON, N , M ,COMM,DOT ,SLSH, ,
//`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
LGUI,LOWR,SPC , RSFT,RASE,RALT
// `----+----+----' `----+----+----'
),
process_record_user
に IMEON
、IMEOFF
が押されたときに複数のキーコードを送信する処理を追加します。
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case QWERTY:
if (record->event.pressed) {
persistent_default_layer_set(1UL<<_QWERTY);
}
return false;
break;
case LOWER:
if (record->event.pressed) {
layer_on(_LOWER);
update_tri_layer(_LOWER, _RAISE, _ADJUST);
} else {
layer_off(_LOWER);
update_tri_layer(_LOWER, _RAISE, _ADJUST);
}
return false;
break;
case RAISE:
if (record->event.pressed) {
layer_on(_RAISE);
update_tri_layer(_LOWER, _RAISE, _ADJUST);
} else {
layer_off(_RAISE);
update_tri_layer(_LOWER, _RAISE, _ADJUST);
}
return false;
break;
case ADJUST:
if (record->event.pressed) {
layer_on(_ADJUST);
} else {
layer_off(_ADJUST);
}
return false;
break;
case IMEON:
if (record->event.pressed) {
register_code(LANG1);
register_code(F14);
} else {
unregister_code(LANG1);
unregister_code(F14);
}
break;
case IMEOFF:
if (record->event.pressed) {
register_code(LANG2);
register_code(F15);
} else {
unregister_code(LANG2);
unregister_code(F15);
}
break;
}
return true;
}
Firmware の書き込み
qmk flash --keyboard keebio/iris/rev2 --keymap ryohey --bootloader avrdude
make での書き方
make keebio/iris/rev2:ryohey:avrdude
結果
Windows 側で認識されました。
Windows での設定
IME で F14, F15 に IME の有効化、無効化を設定します。
追記
macOS でターミナルを利用しているときに F13 がなにかのキーとして入力されてしまうので、F14, F15 を使うように変更しました。
追記2
クラムシェルモードで使っていたので気が付かなかったのですが、F14, F15 は画面の明るさを変えるショートカットに割り当てられているようです。F24 まであるので、何にも割り当てられていないキーを探すとよさそうです。