キーボードには、色んな押し方がある。
それらをQMKで制御することができる。
そのオプションを完全に理解したので共有。
大前提:
config.hに以下のものを書き込むことで制御。
#define TAPPING_TERM 200(その他数値。単位はms)
(以下は目的に合うものを組み合わせる)
#define PERMISSIVE_HOLD
#define IGNORE_MOD_TAP_INTERRUPT
#define TAPPING_FORCE_HOLD
#define RETRO_TAPPING
この4つのオプションの何がどう違うのか、
とても分かりにくかったのだが、
整理してみてやっとわかった。
大前提2:
キーを押してから、
TAPPING_TERM(以下TT)内に離すとTAP、
TTを過ぎてから離すとHOLD扱い。
(デフォは200ms。
経験的に、文字をタイピングするときは100くらいでもいいけど、
マクロパッドなどでは考えながらキーを打つので、
100だと意外とTAPとHOLDの区別がシビアだった。
デフォの200msは考えながらの作業には最適値かも)
例: TT 200(デフォルト値)の場合。
SFT_T(KC_A)に設定されたキーをAとすると、
Aを押してから200ms以内に離せばTAPでaが出る。
Aを押してから200ms経ってから離すとシフトキーを押して、
しばらく待って離したのと同じ。
Aを押してる間をーで示すと、
200ms
|
Aーーー a
Aーーーーーーーーーー Shift押して離す
Bキーと組み合わせた時、
Aーーーーーーーーーーー
B ーー Shift+bなのでBが出る
ここまではわかる。
しかしややこしいケースがある。
Aーーー
B ーーー
のときはどういう挙動?
1. abが出る(ABともに単打扱い。デフォルト)
2. Bが出る(ABが重なってるからシフトがかかる)
Aーーーーーーーーーーー
B ーー
と、AがHOLDされていたら?
1. abが出る(デフォルト)
2. Bが出る(AはHOLDになってるんだからシフトだろ)
Bは200msより先に離してるぞ?どっち?
Aーーーーーーーー
B ーー
1. abが出る(Aを先に離してるから)
2. Bが出る(Aがシフトになってるから)
これもどっち?
こうしたややこしいケースに対して、
「こういう風に定める」と、
オプションで制御するのである。
(なお、_PER_KEYでキーごとにオプションを設定できるが、
話がややこしくなるので以下は全キーでの話に限定)
解説:
#define PERMISSIVE_HOLD
これは、TT以内にそれぞれ離したときに、
どう制御するかのオプションである。
200ms
Aーーーー
B ーー
デフォルトではAはTAPだから、abと出る。
これを、重なってるからシフト優先、とするオプション。
つまりBが出る。
(ちなみに、TTを縮めていくとこの誤打を避けられるか?
TT 0にすると結構快適な処理速度になるので、
「基本HOLD、ほかに何も押さないならTAP」
を、あとの#define RETRO_TAPPING
との組み合わせで実現できます)
#define IGNORE_MOD_TAP_INTERRUPT
Aーーーーーーーーー
B ーーーーーーーー
と、Aを先に離したとき、AはTAPと定義する。つまりabが出る。
(デフォは重なりがシフトになりBが出る)
以下のTAPPING_FORCE_HOLDと組み合わせとくと、
キーリピートオフでゆっくりタイピングするのに向くと思う。
#define TAPPING_FORCE_HOLD
オートリピートをオフにして、
どんなに押しっぱなしでもシフトを継続する。
デフォだとオートリピートで、
しばらく押してるとaaaaaaaになってしまう。
シフトを押しながら考えてるとたいへんだ。
落ち着いて考えるときはこれを選択したい。
とくにこれは、_PER_KEYで個別に制御したいオプションだね。
#define RETRO_TAPPING
仮にシフトになるほど長押ししてたとしても、
他に何も押さずに離したらTAPに戻す。
Aーーーーーーーーーーー
デフォ: 何も出ない(シフトを押して離しただけ)
これ: aが出る
ただ、「他を何も押さず」には、
そのキーボードのキーしか含まれず、
マウスなどの挙動は含まれない。
僕は「シフトキー押しながらマウスで選択」をやりたくて、
かつシフトキーにも単打で別の役割を持たせたくて、
このオプションを選んでいたが、
マウスクリックはキーボードの挙動ではないため、
クリックしても「他に何も押してない」と認識されてしまい、
長押しの果てにポロッと単打が漏れていた。
こういうときは素直に、
#define TAPPING_TERM 200
#define PERMISSIVE_HOLD
#define TAPPING_FORCE_HOLD
の3行でよかったみたい。
短く押して離した時だけ単打で、短かろうが長押しだろうが、
キーリピートオフのままシフトキー継続、
という設定がこれで実現したよ。
こうした挙動の細かい制御は、
どういう目的で使うかによるよね。
ややこしいのだが、
ようやく理解したよ。
間違ってたら指摘してください。
キーリピートが絡むとさらに場合分けが必要だ。めんどくさいのでオフだよなあ。
2021年02月19日
この記事へのコメント
コメントを書く