rhysd/accelerated-jk — pull request #2 by tyru (2012-11-17 18:36:27+00:00)
Title: add g:accelerated_jk_deceleration_table (decelerate by delta time)

時間差で減速する`g:accelerated_jk_deceleration_table`を実装してみました。
OSのキーリピート設定などによる時間差なども考慮すると微妙なので初期値は`[]`にして既存の挙動に影響を加えないようにしてあります。

`g:accelerated_jk_deceleration_table`のデータ構造は

g:accelerated_jk_deceleration_table = [
entry1 = [前回押した時からの時間差(ミリ秒), s:countから引く数],
entry2 = [前回押した時からの時間差(ミリ秒), s:countから引く数],
entry3 = ...
...
]

となっていて、entry2の「前回押した時からの時間差(ミリ秒)」はentry1の「前回押した時から(ry」より大きい数値でないといけません。
例として設定例を示すと以下のような感じです。(`plugin/accelerated.vim`にもコメントアウトする形で残してありますが)

let g:accelerated_jk_deceleration_table = [
[200, 10],
[300, 15],
[500, 30],
[600, 40],
[700, 50],
[800, 60],
[900, 70],
[1000, 9999],
]

こう書くと、「前回押した(ry」が250msecの場合は`s:count`から10引かれます。
「前回(ry」が10msecの場合は0引かれます。(何も引かれません)
「前(ry」が1001msecの場合は9999引かれます。

最後の場合、リセットするようにしてもよかったかもしれません。
`[1000, 9999]`のように最後に「s:countから引く数」が大きいエントリを置けばどうせ`s:count`も`s:stage`も0になる(はず)ですが。

また、`s:count`から引けない場合は`s:stage`から引くようにしてます。