実現したいこと
HelixのFW(QMK)はデフォルトだと、Eisu
、Kana
キーが英語、日本語モードに対応しています。
Mac OSXではそのままEisu
キーが英語モード、Kana
キーで日本語モードに切替できます。
ところがWindowsではEisu
、Kana
キー共にALT + `
に割り当てられていて、どちらを押してもトグル式に英語/日本語が切り替わってしまいます。これは半角/全角での切替と同じですね。
トグル式の切替ですと入力ミスが増えるので、通常私はWindowsではIMEの設定を変更して無変換
、変換
キーを英語(IMEオフ)/日本語(IMEオン)に割り当てて使っています。
HelixのEisu
、Kana
キーにそれぞれ無変換
、変換
をマッピングして、同じように切替をできるようにしたいです。
TL;DR
Eisu
キーに無変換
、Kana
キーに変換
を割り当てても意図した動きにできませんでした。
なので次の表の動きとなるように設定しました。
Helixの物理キー | Windowsが認識するキー | IMEの動作 | 結果 |
---|---|---|---|
Eisu | Shift + F1 | IMEオフ | 英語モード |
Kana | Shift + F2 | IMEオン | 日本語モード |
次から設定内容を記載します。
Windowsの変更箇所
WindowsのIMEの詳細設定でShift + F1
、Shift + F2
をIME オフ
、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 + F1
、Shift + F2
をIMEオフ
、IMEオン
に割り当る方式にしました。