HelixのEisuキーでIMEオフ、KanaキーでIMEオンをしたい


実現したいこと

HelixのFW(QMK)はデフォルトだと、EisuKanaキーが英語、日本語モードに対応しています。
Mac OSXではそのままEisuキーが英語モード、Kanaキーで日本語モードに切替できます。
ところがWindowsではEisuKanaキー共にALT + `に割り当てられていて、どちらを押してもトグル式に英語/日本語が切り替わってしまいます。これは半角/全角での切替と同じですね。

トグル式の切替ですと入力ミスが増えるので、通常私はWindowsではIMEの設定を変更して無変換変換キーを英語(IMEオフ)/日本語(IMEオン)に割り当てて使っています。
HelixのEisuKanaキーにそれぞれ無変換変換をマッピングして、同じように切替をできるようにしたいです。

TL;DR

Eisuキーに無変換Kanaキーに変換 を割り当てても意図した動きにできませんでした。
なので次の表の動きとなるように設定しました。

Helixの物理キー Windowsが認識するキー IMEの動作 結果
Eisu Shift + F1 IMEオフ 英語モード
Kana Shift + F2 IMEオン  日本語モード

次から設定内容を記載します。

Windowsの変更箇所

WindowsのIMEの詳細設定でShift + F1Shift + F2IME オフIME オンに割り当てます。

QMK Firmwareの変更箇所

(編集ソースはqmk_firmware/keyboards/helix/rev2/keymaps/default ディレクトリをmwlとしてコピーしたものとなります)

次のようにkeymap.cを修正することで、HelixのEisuキーを入力するとShift + F1が、Kanaキーを入力するとShift + F2がWindows上で入力されるようになります。

ビルド方法・FWの焼き込み方法などは割愛します。(公式ビルドガイドを参照ください)

mbp:qmk_firmware msrx9$ git diff
diff --git a/keyboards/helix/rev2/keymaps/mwl/keymap.c b/keyboards/helix/rev2/keymaps/mwl/keymap.c
index c575287ee..546bc4870 100644
--- a/keyboards/helix/rev2/keymaps/mwl/keymap.c
+++ b/keyboards/helix/rev2/keymaps/mwl/keymap.c
@@ -430,7 +430,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
         if(keymap_config.swap_lalt_lgui==false){
           register_code(KC_LANG2);
         }else{
-          SEND_STRING(SS_LALT("`"));
+          register_code(KC_LSFT);
+          register_code(KC_F1);
+          unregister_code(KC_F1);
+          unregister_code(KC_LSFT);
         }
       } else {
         unregister_code(KC_LANG2);
@@ -442,7 +445,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
         if(keymap_config.swap_lalt_lgui==false){
           register_code(KC_LANG1);
         }else{
-          SEND_STRING(SS_LALT("`"));
+          register_code(KC_LSFT);
+          register_code(KC_F2);
+          unregister_code(KC_F2);
+          unregister_code(KC_LSFT);
         }
       } else {
         unregister_code(KC_LANG1);

以上です。


当初の目的通り、無変換、変換キーじゃダメだったの?

実現したいことの部分にも記載している通り、最初は無変換変換を使うようにマッピングしてみました。
ですがHelixで無変換変換を使うことができませんでした。
正確に言うならば無変換変換キーのスキャンコードを送ってもWindowsが認識しませんでした。

原因はUSキーボードとJISキーボードでは対応するスキャンコードが変わるからです。つまりOSがUS/JISどちらのキーボードとしてHelixを認識しているかに影響されるわけです。
HelixはWindowsではUSキーボードとして認識されます。

変換無変換キーはJISキーボードにしか存在しないキーのため、WindowsがUSキーボードと認識している状態で変換無変換キーのスキャンコードを送っても無視されるわけです。

F13、F14をIME切替に割り当てるという記事もあったので試してみましたが、F13はPrintScreenに、F14はScrollRockキーとして動作してしまったので私の環境では使うことができませんでした。

ですので、一般的には使うことのないShift + F1Shift + F2IMEオフIMEオンに割り当る方式にしました。