前の記事はこちら 親指シフトキーボードプロジェクト その28
さて、(前の記事で書いた)親指シフトモードから「SHIFT+半角英数字キー」を押してしまうと、バグる現象ですが・・・
通常は「親指シフトモード」でSHIFTを押すと(一時的に)半角英数字入力モードになるのですが、バグるとSHIFTを押しても「親指シフトモード」のままになってしまい・・・どんな操作をしても戻せないので、USBケーブルを抜き差ししてリセットしていました。
これについて、自分なりにQMKのプログラムを追って原因を追究してきました。
で・・・
C:\Users\(ユーザー名)\qmk_firmware\users\nicola\nicola.c の
void nicola_mode(uint16_t keycode, keyrecord_t *record)
この関数が「親指シフトモード」でSHIFTを押したときの動きを制御していることが分かりました。
さらに n_modifier という変数で layer_off(nicola_layer) と layer_on(nicola_layer) の制御をしているので、これが正しくカウントされていないのではないかと突き止めました。
(通常はSHIFTキーを押すとn_modifierをカウントアップ、逆にSHIFTキーを離すとn_modifierをカウントダウンで0に戻るのですが・・・SHIFTキーを押して英数モードに飛ぶとn_modifierが0に戻らないのでしょう。
ということで、対処としては単純です。
void nicola_off(void) の関数の最後に
n_modifier = 0;
を追加しました。
を追加しました。
これで・・・バグの現象が解決しました。
しかし・・・あちら立てればこちらが立たず、です。
右側の方にある「上矢印キー」の左にある「右SHIFTキー」はバックスラッシュと兼用にしていて「RSFT_T(KC_RO)」という定義なのですが・・・nicola_mode関数が、これをうまく使えないようです。
「親指シフトモード」で右SHIFTを押すと、やっぱりバグ状態になります。でも、「英数キー」で英数字モードにして、再度「親指シフトキー」で「親指シフトモード」にすれば、バグ状態から抜け出すことができるので、一歩前進です。
「親指シフトモード」で右SHIFTを押すと、やっぱりバグ状態になります。でも、「英数キー」で英数字モードにして、再度「親指シフトキー」で「親指シフトモード」にすれば、バグ状態から抜け出すことができるので、一歩前進です。
※このバグの現象と言っている(書いている)のは・・・元記事の方のプログラムのバグではなく、私が勝手にいろいろと手を加えた部分のバグです。
元記事のプログラムでは、_FUNCレイヤーのキーで親指シフトモードに入って、_FUNCレイヤーのキーで親指シフトモードから抜けるようになっていました。(整合性が取れている)
それを、私が、_FUNCレイヤーのキーで親指シフトモードに入って、_NICOLAレイヤーのキーで親指シフトモードから抜けるように(勝手に)変更したのが良くなかったようです。(ここで、整合性が取れなくなった)
続きの記事はこちら 親指シフトキーボードプロジェクト その30