#author("2026-10-07T13:01:51+09:00","","") #author("2026-10-07T14:30:48+09:00","","") * automaton [#f308ce44] ** event [#q901e153] |記号|意味|判定1|判定2|備考| |C|click|is_click||| |T|tap|is_tap||| |H|first repeat(nr=1)|is_hold|is_same_key|↻ ⟳ » ⇢ ˙ ⏩ ⌁ 🔁 ⬇ 🔽| |R|next repeat(nr>1)|is_repeat|is_same_key|| |E|repeat end|repeat_end||timer, 履歴には積まない、状態遷移だけ| |B|break(change buffer)|break||mouse click, 履歴には積まない、状態遷移だけ| ** status [#u9e1f0b2] - HOLD : 最初のrepeat(nr=1), is_hold - REPEAT : 2回目以降のrepeat(nr>1) - NORMAL : その他 -- click : シーケンス開始 -- tap : シーケンス継続中 ** attribute [#o054971f] - nt: 同一キーの連続タップ回数 - nr: 同一キーのrepeat回数 - nh: 同一シーケンス内のhold回数:廃止 - is_same_key: メタをのぞいて前回と同じキー - ng_repeat: repeatがこないところでis_repeat(interval) ** event.type [#jcd625a7] - click : シーケンス開始 - tap : シーケンス継続 - repeat : os key repeat ** trans [#pc22b979] |state|threshold|next state|action|type|ng|note| |NORMAL|is_hold|next state|action|type|ng|note| |state|condition|next state|type|action|nt|nh|nr|ng|note| ||!=same key|-> NORMAL|(N)CT||c1,t1|(N)c0|(N)0||| |NORMAL|is_hold|-> HOLD|R|||++|(H)1||| ||is_repeat|-|(N)CT||c1,t++|(N)c0|(N)0|++|| ||else(ct)|-|(N)CT||c1,t++|(N)c0|(N)0||| |HOLD|is_repeat|-> REPEAT|R||||(R)++||| ||is_hold|-|R||||(H)1|++|| ||else(ct)|-> NORMAL|(N)CT||c1,t1|(N)c0|(N)0||| |REPEAT|is_repeat|-|R||||(R)++||| ||is_hold|-> NORMAL|(N)CT|||(N)c0|(N)0||| ||else(ct)|-> NORMAL|(N)CT||c1,t1|(N)c0|(N)0||| ** transition [#j1daa198] CTHREB click, tap, repeat 2000, 500, 150, 150, 150, 2000 |status|Ckick|Tap|Hold|Repeat|End|Break|| |NORMAL|NORMAL|NORMAL|HOLD|(NORMAL)[1]|ERROR|NORMAL|| |HOLD|(NORMAL)[2]|(NORMAL)[3]|(HOLD)[4]|REPEAT|NORMAL|NORMAL|| |REPEAT|NORMAL|NORMAL|(HOLD)[5]|REPEAT|NORMAL|NORMAL|| |500|NORMAL|421(NG)|NORMAL|500|NORMAL|500|NORMAL| |150|HOLD|150|NORMAL(NG)|171(NG)|HOLD|150|HOLD| |150|REPEAT|150|NG REPEAT 1[1]|150|NORMAL(NG)[2|3]|150(NG)|REPEAT| |150|REPEAT|150|NG REPEAT 2|150|NG REPEAT 1|150|NORMAL(NG)| |150|REPEAT|150|NG REPEAT 3|150|NG REPEAT 2|150|NG REPEAT 1[1]| - [4] (CASE 1) HOLD -> HOlD は前が tap|click - [4] (CASE 2) hold ~ repeat なら今回がrepeatかも - [5] (CASE 1) hold 今回が tap|click - [5] (CASE 2) hold ~ repeat なら今回がrepeatかも |status|event|next|type|ng|note||| |NORMAL|H|HOLD|repeat|0|||| ||C|-|click|0|||| ||T|-|tap|0|||| ||R (NG)|-|click|tap|++|直前のNORMALはHOLD|REPEAT||| ||E (NG)|-|x|0|||| ||B|-|x|0|||| |HOLD|R|REPEAT|repeat|0|rush中のhold回数をカウントするならここ||| ||C|NORMAL|click|0|||| ||T|NORMAL|tap|0|||| ||H(NG)|HOLD|repeat|0|直前のHOLDはclip|tap||| ||E|NORMAL|x|0|||| ||B|NORMAL|x|0|||| |REPEAT|R|REPEAT|repeat|0|||| ||C|NORMAL|click|0|||| ||T|NORMAL|tap|0|||| ||H(NG)|NORMAL(NG)|clip | tap|0|直前のREPATはclip|tap||| ||E|NORMAL|x|0|||| ||B|NORMAL|x|0|||| ** entry [#x1b321c6] |status|prev|type|ser|nt|nr|nh|note| |NORMAL||click|x|1|0|0|series off| |||tap:diff|o|1|0|-|| |||tap:same|o|++|0|-|| ||!=NORMAL||-|1|0|-|tap reset| |HOLD|NORMAL||o|-|1|-|直前がhold_start| ||HOLD||o|-|1|-|直前がhold_start| |REPEAT|||o|-|++|*|nr==2 ならnh++| ** example [#q9eaf209] |||interval|status|TYPE|nt|nr||| |tan|j|800|NORMAL-CLI|click|1|0||| |-|j|500|BGCOLOR(orange):HOLD|repeat|1|1||| |-|j|150|REPEAT|repeat|1|2||| |-|j|150|REPEAT|repeat|1|3||| |ta|k|800|NORMAL-CLI|click|1|0||| |tan|k|300|NORMAL-TAP|tap|2|0||| |-|k|500|BGCOLOR(orange):HOLD|repeat|2|1||| |-|k|150|REPEAT|repeat|2|2||| |-|k|150|REPEAT|repeat|2|3||| ** NG example [#xc495c83] *** is_repeat 失敗 : NORMAL [#t349611b] |||interval|status|TYPE|ng|nt|nr|note| |tan|j|is_repeat|REPEAT|repeat|0|1|2|| |-|j|NG repeat|NORMAL|tap|0|2|0|| |-|j|is_repeat|NORMAL|tap|1|3|0|| |-|j|is_repeat|REPEAT|repeat|2|1|4|ng==2 なら nt--, nr=2, ng=0| *** is_hold 失敗 : NORMAL [#pb11181a] |||interval|status|TYPE|ng|nt|nr|note| |tan|j|521|NORMAL|click|tap|0|1|0|| |-|j|is_repeat|NORMAL|tap|1|2|0|| |-|j|is_repeat|REPEAT|repeat|2|1|2|ng==2 なら nt--, nr=2, ng=0| *** is_hold 失敗 : HOLD [#w8a1bc12] *** is_hold 失敗 : REPEAT [#r4c55cf2] ** 特殊事情 [#wd9c8bf1] - IMEは最初の1文字だけon_keyにキャッチされる -- "あbc"とタイプしてEnterで確定すると"あ"だけ入力と認識される - ⌘+vのペーストはon_keyでは無視される