#author("2026-09-11T15:17:36+09:00","","")
#author("2026-09-11T15:26:10+09:00","","")
* spec [#ta285c40]

** 基本方針 [#q1b2bcc3]

- キー入力のリズムに対応してexpr keymapを使ってキーを置き換える
-- つまりキー入力の履歴をみて置き換えの判断をします
- 同じキーの連続入力だけを対象とする
- よく使うキーコンビネーションは変化させない
- 頻度の低い(と思われる)キーコンビネーションに限って変化させる
-- 何をよく使うかは個人差があると思うのでユーザーがカスタマイズできる様にする

** mode [#vd3506d4]

- 押し下げたキー(type)とvimに渡すキー(return)。"-"とあるものは"j"を渡す
- 変化するのはtypeに書いてある最後のキー。
- つまり次の表では"hold j"以外は変化せずタイプした通りvimに渡る
- "j"の部分は"k", "w", "B" などにも対応可能

|key type|return|pattern(J)|pattern(E)|検出|note|
|j|-|タッ|T|C||
|jj|-|タタッ|TT|CT||
|jjj|-|タタタッ|TTT|CTT||
|hold j|-|タン|H|SH||
|8 + hold j|8j|タン|H|SH|C:vim.v.count1 > 1|
|j + hold j|5j|タタン|TH|CTSH||
|jj + hold j|10j|タタタン|TTH|CTTSH||
|jjj + hold j|20j|タタタタン|TTTH|CTTTSH||
|key type|return|pattern(J)|pattern(E)|command|note|
|j|-|タッ|T|1||
|jj|-|タタッ|TT|2||
|jjj|-|タタタッ|TTT|3||
|hold j|-|タン|H|1H||
|8 + hold j|8j|タン|H|1H|C:vim.v.count1 > 1|
|j + hold j|5j|タタン|TH|2H||
|jj + hold j|10j|タタタン|TTH|3H||
|jjj + hold j|20j|タタタタン|TTTH|4H||

"5", "10", "20" の値はカスタマイズ可能。”キーコンビネーション設定”参照。

例:
- jj + hold j と入力した場合
- 最初のjはTと解釈します。return j
- 次のjはTTと解釈します。return j
- 次のjでholdに入りますがholdに入ったことはpluginにはまだわかりません。なのでTTTと解釈します。return j
- 次のjでholdに入っていたことがわかるのでTTHと解釈します。return 10j
- つまり3回"j"で移動した後holdしている限り"10j"で移動します。

** tap / hold 判定 [#qa0c4727]

同じキーを連続して入力した場合setup で指定した時間間隔を使って判定する
- 閾値
-- hold-repeat-interval (t_rep)
-- first-hold-interval-lower(t_hold1)
-- first-hold-interval-upper(t_hold2)
-- tap(t_tap)
- 判定
-- if interval <= t_rep : hold repeat [ R ]
-- elseif t_hold1 <= interval <= t_hold2 : start hold repeat [ S ]
-- elseif interval <= t_tap : tap [ T ]
-- else : click [ C ]

なお判定式からわかる様に t_rep < interval < t_hold1 はtapに分類されます。
t_tap < interval はclickに分類されます。

** 支援機能 [#ic0ad232]

- 支援モードに入るとキータイプ解析結果を表示する(float window)
- メニュー表示(1,2,3で機能を選択)
- 1. hold測定
-- hold を何度か試す。time1,2,3 の統計情報を表示する
-- <esc>でメニューに戻る
- 2. tap測定
-- tapと判定してもらいたいギリギリでゆっくりtapする
-- 統計情報を表示する
- 3. フリーモード
-- 設定値に従ってhold, click などの判定を表示する
-- 統計情報を表示する
- <ESC>で支援モードを抜ける

** キーコンビネーション設定 [#xdc0975e]

設定table。将来はsetupで変更可能とする。

例
 pattern_NH = { keymap = {"h", "j", "k", "l"}, prefix = { "n" } }
 pattern_TH = { keymap = {"h", "j", "k", "l"}, prefix = { "5" } }
 pattern_TTH = { keymap = {"h", "j", "k", "l"}, prefix = { "10" } }

ここで"NH", "TH", "TTH" はmode表の"pattern(E)"に対応する。

** 将来構想 [#rf2fba0c]

- gj + hold j で"gj" 連続
- 8gj + hold j で"8gj" 連続 : 使わない様な気もする

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