#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では無視される

Front page   Edit Diff History Attach Copy Rename Reload   New Page list Search Recent changes   Help   RSS of recent changes