1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

落ち着きのないレイヤー移動(再現できず?)

Last updated at Posted at 2018-08-28

タッピングが早漏で、うまく認識してくれない場合、以下の設定をすれば良いようだ。

"良いようだ"と言う発言の意図は、私の環境では上手く動いてくれなかったため(勘違いしていたのが原因)。

今回も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)を今回例として使う。

  1. SFT_T(KC_A)キー押下
  2. KC_Z押下
  3. KC_Z押上
  4. SFT_T(KC_A)キー押上

通常であれば、azが入力される。
しかし、今回の設定により、Zが入力されるようになる。

config.h
#define PERMISSIVE_HOLD

##"再現できない"ことについて。
私が勘違いしていたことが大きな要因だった。
上記通りの手順で行えば、設定されていることが確認できた。
しかし、私がキー操作の順を入れ子にしていたため、上手く動いてくれなかった。
具体的には以下の通り。

  1. SFT_T(KC_A)キー押下
  2. KC_Z押下
  3. SFT_T(KC_A)キー押上
  4. KC_Z押上

これでは、azが入力されてしまう。
こんな順番を意識しなければ使えないのであれば、使えない設定になる。
(どうしても私はこの使い方をするようで、上手く動いてくれない)
決められた順序通りにタイピングできるのであれば、早漏にはうれしい設定だろう。

##タッピング時間
とりあえず、config.hのTAPPING_TERMの値を500に設定した場合、今回の設定は自動的に割り当てられるようだ。
480と500で挙動を確認できた。
200では、短いため、あまり用をなさない(何より、順番が大事なのがな・・・)。

config.h
#define TAPPING_TERM 500

この500の時間で、KC_Aが打てる状態からSHIFTキー押下に変化する。
ちなみに、私が普段使う値は、180にしているが、標準では200が設定されている。

#Mod tap interrupt
これ何?
これを使ったことで解決した人がいるようだ。

例えば,CTL_T(KC_A)の設定で、KC_A押下直後に、KC_Z押下をした場合、通常のテキストエディタでの挙動は切り取りになるだろう。
しかし、ゲームをしているときに、その挙動では困る。
"A"キーと"Z"キーがゲームに送出されなければ、きっと負けてしまうだろう。
負けないための設定が、今回か?

config.h
#define IGNORE_MOD_TAP_INTERRUPT

使い方が分からないのは、その挙動を確認できなかったからだが・・・。
押下や押上の順番などは関係なさそうに思う。
Tapping Termを短い時間にしていれば、無駄だと言うことなのかな・・・。逆に、長い時間に設定しても恩恵は受けられないし・・・。
※レイヤー切り替えは対象外で、CTL_Tなどのモディファイアのみに対応しているようだ。

#Hold after tap
2回目のタップで、押下し続けることにする。

  1. SFT_T(KC_A)キー押下 ←1回目

  2. SFT_T(KC_A)キー押上

  3. SFT_T(KC_A)キー押下 ←2回目
    一定時間押し続ける。

  4. SFT_T(KC_A)キー押上

もし、今回の設定をしていない場合、2回目の押下で、"A"キーが送信され続けることになる(一定時間押し続けるため)。
テキストエディタに、aの文字が止まることなく入力され続けていることだろう。
今回の設定で、Shiftキー押下として機能することになる。
要は、テキストエディタにaが入力された後は、入力がなされず、Shiftキー押下していることになり・・・。
一応再現できたが、これが何の意味があるのだろう。
Shiftキーを使いたいのであれば、最初に押したままにすれば良いだろうし、Aキーとして使いたいのであれば、タップだけでいいだろうし・・・。

config.h
#define TAPPING_FORCE_HOLD

メリットが分からない。
また、タップでトグルするキーとかぶってしまうため、注意が必要になる(例えば、TTレイヤーたワンショットタッピングなど)。

#Retro Tapping
タッピング時間(TAPPING_TERM)を無視して、タップの挙動が欲しい場合があるだろう。
例えば、SFT_T(KC_A)を押し続けた場合、Shiftキー押下になる。
しかし、Aキーが欲しかった場合、どうするのか・・・。
それが今回の設定になる。

config.h
#define RETRO_TAPPING
  1. SFT_T(KC_A)キー押下 ←1回目
    一定時間押し続ける。
  2. 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"の通りに修正すれば良いと思っている。
合っているよね。
⇒合っていない行動だった。

Add support for RETRO_TAPPING to LT.jpg

この指摘が反映されておらず、そしてソースコードが書き換わっているため、どのように修正すれば良いのか分からない。
取り込まれているようなコメントにも見えるため、どうなっているのか分からない。
う〜ん・・・英語力が無いので、イマイチ解決方法が分からない。
ならば・・・放置。

#ちなみに
ここで勝手に押上という言葉を使ったが、理解してくれるだろうか。
押下がキーを押すことなので、離す(上げる)ことを想定しているのだが・・・。
そもそも押下とは何ぞや⇒押下(おうか)にまつわる話

そして、今回もHHKBを使って執筆していることは内緒だ。

以上。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?