タッピングが早漏で、うまく認識してくれない場合、以下の設定をすれば良いようだ。
- Permissive Hold:タップを押し続けたこととして認識する。
- Mod tap interrupt
- Hold after tap
- Retro Tapping
"良いようだ"と言う発言の意図は、私の環境では上手く動いてくれなかったため(勘違いしていたのが原因)。
今回もconfig.hを変更する。
「~\qmk_firmware\keyboards\ergodox_ez」ディレクトリ配下にあるのは周知の通り。
#Permissive Hold
タッピング時間前に、他のキー押下にて(下記で言う)Shiftキー押下をしたこととして扱われる。
ただし、押下順序があるため、気をつけなければならない。
This makes it easier for fast typists to use dual-function keys. Without this, if you let go of a held key inside the tapping term, it won't register.
SFT_T(KC_A)を今回例として使う。
- SFT_T(KC_A)キー押下
- KC_Z押下
- KC_Z押上
- SFT_T(KC_A)キー押上
通常であれば、az
が入力される。
しかし、今回の設定により、Z
が入力されるようになる。
#define PERMISSIVE_HOLD
##"再現できない"ことについて。
私が勘違いしていたことが大きな要因だった。
上記通りの手順で行えば、設定されていることが確認できた。
しかし、私がキー操作の順を入れ子にしていたため、上手く動いてくれなかった。
具体的には以下の通り。
- SFT_T(KC_A)キー押下
- KC_Z押下
- SFT_T(KC_A)キー押上
- KC_Z押上
これでは、az
が入力されてしまう。
こんな順番を意識しなければ使えないのであれば、使えない設定になる。
(どうしても私はこの使い方をするようで、上手く動いてくれない)
決められた順序通りにタイピングできるのであれば、早漏にはうれしい設定だろう。
##タッピング時間
とりあえず、config.hのTAPPING_TERM
の値を500に設定した場合、今回の設定は自動的に割り当てられるようだ。
480と500で挙動を確認できた。
200では、短いため、あまり用をなさない(何より、順番が大事なのがな・・・)。
#define TAPPING_TERM 500
この500の時間で、KC_Aが打てる状態からSHIFTキー押下に変化する。
ちなみに、私が普段使う値は、180にしているが、標準では200が設定されている。
#Mod tap interrupt
これ何?
これを使ったことで解決した人がいるようだ。
例えば,CTL_T(KC_A)の設定で、KC_A押下直後に、KC_Z押下をした場合、通常のテキストエディタでの挙動は切り取りになるだろう。
しかし、ゲームをしているときに、その挙動では困る。
"A"キーと"Z"キーがゲームに送出されなければ、きっと負けてしまうだろう。
負けないための設定が、今回か?
#define IGNORE_MOD_TAP_INTERRUPT
使い方が分からないのは、その挙動を確認できなかったからだが・・・。
押下や押上の順番などは関係なさそうに思う。
Tapping Termを短い時間にしていれば、無駄だと言うことなのかな・・・。逆に、長い時間に設定しても恩恵は受けられないし・・・。
※レイヤー切り替えは対象外で、CTL_Tなどのモディファイアのみに対応しているようだ。
#Hold after tap
2回目のタップで、押下し続けることにする。
-
SFT_T(KC_A)キー押下 ←1回目
-
SFT_T(KC_A)キー押上
-
SFT_T(KC_A)キー押下 ←2回目
一定時間押し続ける。 -
SFT_T(KC_A)キー押上
もし、今回の設定をしていない場合、2回目の押下で、"A"キーが送信され続けることになる(一定時間押し続けるため)。
テキストエディタに、aの文字が止まることなく入力され続けていることだろう。
今回の設定で、Shiftキー押下として機能することになる。
要は、テキストエディタにaが入力された後は、入力がなされず、Shiftキー押下していることになり・・・。
一応再現できたが、これが何の意味があるのだろう。
Shiftキーを使いたいのであれば、最初に押したままにすれば良いだろうし、Aキーとして使いたいのであれば、タップだけでいいだろうし・・・。
#define TAPPING_FORCE_HOLD
メリットが分からない。
また、タップでトグルするキーとかぶってしまうため、注意が必要になる(例えば、TTレイヤーたワンショットタッピングなど)。
#Retro Tapping
タッピング時間(TAPPING_TERM
)を無視して、タップの挙動が欲しい場合があるだろう。
例えば、SFT_T(KC_A)
を押し続けた場合、Shiftキー押下になる。
しかし、Aキーが欲しかった場合、どうするのか・・・。
それが今回の設定になる。
#define RETRO_TAPPING
- SFT_T(KC_A)キー押下 ←1回目
一定時間押し続ける。 - SFT_T(KC_A)キー押上
本来であれば、Shiftキーとして動くのだが、今回の設定で、テキストエディタにはaが入力されていることだろう。
先日のAutoShiftと組み合わせれば、完全にSpace&Shift(SandS)になる・・・わけないか。
私はErgoDoxEZを使っているため、不要な設定でどうでもいいからな。
※一定時間押し続けてもキー押上で、Aキーとして動くのだが、それは他のキーを押下しなければと言う前提がある。
一定時間押下時に、Bキーを押せば、大文字のBがエディタに出力されることになる。
※当たり前のことだが、マウスのクリックをしたとしてもキーボードからのキー押下ではないため、今回の場合はAキーが送信されてしまう。要は、意図しない動きをする。
再現できない
今回の問題で、今回の設定が反映されない機能がある。
それが、レイヤー切り替えとの組合せ。
レイヤー1のキーに、バックスペースキーを割り当てているのだが、一定時間を経過しようが、バックスペースとして機能して欲しいと思っていた。
他にもレイヤー2のキーに、Escキーを割り当てているため、一定時間を経過しようが、エスケープとして機能して欲しいと思っていた。
しかし、働かないため、どうしようもない。
##C言語の出番
要は、単純に出来るとしか説明していない記事は嘘で、レイヤーで動かしたい場合は、一手間必要だ。
私と同じように設定している人もいるようで、その人はすでに解決済みのようだ。
ゆえに、参考にさせてもらう。
Add support for RETRO_TAPPING to LT(layer, kc) #2805
Make LT send the keycode if no other key was tapped #1521
個人的にGitHUBの使い方を分かっていないのだが、"Files changed"の通りに修正すれば良いと思っている。
合っているよね。
⇒合っていない行動だった。
この指摘が反映されておらず、そしてソースコードが書き換わっているため、どのように修正すれば良いのか分からない。
取り込まれているようなコメントにも見えるため、どうなっているのか分からない。
う〜ん・・・英語力が無いので、イマイチ解決方法が分からない。
ならば・・・放置。
#ちなみに
ここで勝手に押上
という言葉を使ったが、理解してくれるだろうか。
押下
がキーを押すことなので、離す(上げる)ことを想定しているのだが・・・。
そもそも押下とは何ぞや⇒押下(おうか)にまつわる話
そして、今回もHHKBを使って執筆していることは内緒だ。
以上。