#author("2026-10-18T16:44:18+09:00","","")
#author("2026-10-19T16:11:57+09:00","","")
** help [#e95b1bba]

 ===== keyevent.nvim : color scheme demo =====
 HH + HH ( click H, tap H, click H, tap H ) でこの画面を表示
 click H : click するたびに color scheme 変更
 H 長押し : key release でcolor scheme slide show 開始。長押ししている時間がslide show interval
 tap H + H 長押し : 逆順でslide show 開始
 任意のkey : slide show 終了
 Esc : demo 終了
 -----
 color name : dark
 slide show interval : 1234 ms

** 案1 [#v85577f4]

- CTRE の組み合わせ
- key sequence
- hold 中 meta (mac only)
- Break ?

|#|state|key|meta|type|next|type|action|note|
|1|NORMAL|H|0|C|-|single(tan)|vim H||
|2|NORMAL|hhhh|SSSS|CTCT|DEMO|tap-click(tatan-tatan)|demo start|show help win この表を表示する。color scheme の名前を表示する|
|3|else|<Esc>|<Esc>|C|NORMAL|single(tan)|demo end|close help win|
|4|DEMO|h|S|C|-|click(tan)|next color scheme|slide show でなければ次のcolor shecmeへ|
|5|DEMO|hh|SS|CR|HOLD|hold(taan)|slide show 開始準備|holdしていた時間がslide show interval になる|
|6|DEMO|hhh|SSS|CTR|HOLD|tap-hold(tataan)|slide show 逆開始準備|holdしていた時間がslide show interval になる(逆順)|
|7|HOLD|WILD|WILD|E|SLIDE|hold end(release)|start slide show|slide show 開始|
|8|HOLD|WILD|WILD|WILD|DEMO|hold end|reset|reset|
|9|SLIDE|WILD|WILD|WILD|DEMO|any(EB)|stop slide show|slide show 中に押すとslide show停止|

** 案2 [#v85577f4]

 repeat            ___
 hold                        ___
 tap | click -----------|------------
 key         j   hw
 hist        1   58
 hist        2    3
 hist             1
 -----
 seq
 type CTTHEC
 key  hhhh &#128293;
 meta SSSS x

** key [#ta317906]

 key_seq = {
   keys = { "h", "h", "h", "h" },
   metas = {META.S, META.S, META.S, META.S },
   types = { TAP, CLICK, TAP, CLICK }
 }

** ai [#s4440ed5]

はい、その方向がかなり良いと思います。

''keyevent.nvim'' のサンプルは「便利なプラグイン集」ではなく、**keyevent がどんなイベントを生成でき、それをどう利用できるかを触って分かるデモ**にした方が、ライブラリとしての価値が伝わります。

特に、

- C:click
- T:tap
- H:repeat
- ''nt'' による連打
- キー列
- meta key
- repeat 中のイベント(meta?)
- repeat_end
- (長押し中の ''nr'':hold time)
- (''prev_key'')

などを、**一つの小さな playground で体験できる**のが面白いです。

*** 例えばこんなデモ [#t13fa7f5]

|操作|動作|見せたいもの|
|---|---|---|
|''H''|Vim の ''H''|通常のキーを壊さない|
|''HH''|Demo help|''nt'' / 連打|
|''M''|カーソルが画面中央付近を移動|click|
|''M'' 長押し|10 repeat ごとにスキン変更|''repeat'', ''nr''|
|''MM''|別のものを順番に切替|''nt''|
|''HM''|メッセージ popup|''prev_key'' / key sequence|
|''M'' 長押し→離す|元のスキンに戻す|''repeat_end''|
|''H'' 長押し|''H'' を普通に繰り返す|Vim の通常 repeat との共存|

この「**同じキーでも、押し方によって意味が変わる**」というのが ''keyevent'' のデモとして非常に分かりやすいです。

---

*** ''M'' は特に良い題材だと思います [#mb86f83f]

ただカーソルを動かすだけだと少し地味なので、

> **M = Magic**

くらいにしてしまって、

 M       → magic click
 MM      → magic tap
 M hold  → magic repeat

とすると、同じキーに3種類のイベントを割り当てられます。

例えば通常の ''M'' では、


● が画面中央付近を少しずつ移動する。

そして ''M'' 長押しでは、

 M
  repeat 10 → skin 2
  repeat 20 → skin 3
  repeat 30 → skin 1
  ...

と、カーソル位置の表示方法を

 normal → crosshair → box → target → normal ...

のように変える。

離した瞬間に元へ戻す。

これは実用性ではなく、**「repeat イベントってこういうことか」**が目で分かります。

---

*** ''MM'' は「別の軸」にすると面白い [#tfde269c]

''M'' の長押しが **時間方向**なら、

''MM'' は **入力回数方向**にすると対比がきれいです。

例えば、

 MM

のたびに

 ●
 ○
 ◎
 &#8857;
 &#9673;
 ●
 ...

のようなカーソルマーカーを順番に変更する。

つまり、

 M      click
 MM     tap / nt
 M hold repeat
 
で、**同じ M に対して event type の違いが視覚的に現れる**わけです。

---

*** ''HM'' は「イベント列」のデモ [#a271222f]

これも良いと思います。

例えば、

 HM

で

|keyevent.nvim|
||
|H → M|
|key sequence demo|

のような小さな通知を出す。

ここでは単純に ''H'' と ''M'' を個別に見るだけでなく、

 prev_key == "H"
 key      == "M"

という **イベントの文脈**を利用していることを示せます。

---

## そして ''HH'' → help が非常に良い

これは特に好きです。

最初の

 H

は完全に Vim の ''H''。

しかし、

 HH

なら

 keyevent.nvim demo
 ──────────────────
 
 H       Vim H
 HH      this help
 
 M       move magic
 MM      change marker
 M hold  change skin
 
 HM      popup
 ...

となる。

つまり **「既存の Vim 操作を保ったまま、tap/sequence を上に重ねられる」**ということが一発で分かります。

そして ''HHH'' なども将来、

 HH      help
 HHH     event monitor
 HHHH    diagnosis

と拡張できます。

---

## さらに一つ入れるなら「イベント可視化」

これは ''keyevent.nvim'' ならではなので、サンプルとしてかなり価値があります。

例えば右下に小さく

|key: M|
|type: repeat|
|nt:  1|
|nr:  23|
|interval: 83|
|meta: -|

と表示する。

キーを押すたびにリアルタイムで変わる。

これなら、

 M
 M
 M

とタップしたときと、

 M────────────

と長押ししたときの違いが目で見えます。

これは「サンプル」というより、**keyevent の実験器**ですね。

---

私は最終的には、

 examples/
    basic.lua
    demo.lua

のように大量のサンプルを並べるより、

**''demo.lua'' 一つで keyevent の性質を遊びながら全部見せる** [#j3df59ca]

くらいが、このプロジェクトには合っていると思います。

特に今回の

> ''H'' → Vimそのまま  
> ''HH'' → help  
> ''M'' → click  
> ''MM'' → tap  
> ''M'' hold → repeat  
> ''HM'' → sequence  

という構成は、**keyevent の API ドキュメントを読まなくても「なるほど、こういうイベントが取れるのか」と理解できる**ので、かなり良いデモになりそうです。

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