qmk firmwareをあれこれ試してみている.複雑なソフトなので,「このキーを押すとこの字が出る」以上のこともできるわけだが,それなりに謎が出てくることも多い.
いわゆるMod-TapとかLayer-Tapとか言うのか,「長押しするとモディファイヤキーやレイヤー変更になり,普通に打つと違うキーになる」という機能がある.だが,普通は実際にやりたいのは「押す長さで機能を変える」のではなく「何かとの同時押しか,そうでないかで機能を変える」ということなのだ.SandSとかそういうやつだ.
ちゃんとそのためのオプションがあって,RETRO_TAPPINGを#defineすると「長押し検知時間にかかわらず,同時押しでなければ単独押しキーが発動する」となり,PERMISSIVE_HOLDを#defineすると「長押し検知時間にかかわらず,他キーと同時押しなら同時押しとして働く」となる……はずなのだ.うまく動かないんだけど.どうもPERMISSIVE_HOLDはキーを離す順序が関係あるせいのようだ.でもRETRO_TAPPINGがうまく動かない理由はよくわからない.あまりにも押してる時間が長すぎる場合は駄目なんだろうか?
まあ結局これらはキーを押す長さで判断する機能ベースだからなのだ.たぶん.あきらめてここのページを参考に,static変数を導入して自前で判定することにしたら,俺が希望するような動作になった.よかったよかった.「同時押しだとシフトで単独だとスペース」みたいなキーコードを組み合わせごとにいちいち作る感じになって,なんか無駄が多いような気もするが,別に大量に作るわけでもないからいいか.
あとキリル文字を直接入力するのはちょっと難しそうだ.要するにunicodeを直接入力する方法が統一されていないかららしい.linuxだとibusを使ってれば可能性があるらしいが,そのためだけに変えるのもめんどくさい.