diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2015-06-27 15:19:10 +0200 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2015-06-27 15:19:10 +0200 |
| commit | af43549eb3a6add4c9ae5ac86f30fc2bd0325ac6 (patch) | |
| tree | e8ae9061e00db9d9c8fa2cbce39e488c8857dd3d /text.c | |
| parent | 13caec50e0974961f31c2b03ad3ba64e0042f6e1 (diff) | |
| download | vis-af43549eb3a6add4c9ae5ac86f30fc2bd0325ac6.tar.gz vis-af43549eb3a6add4c9ae5ac86f30fc2bd0325ac6.tar.xz | |
Make :earlier and :later accept arguments similar to vim
Currently the following arguments are accepted:
{count} Go to older text state {count} times.
{N}s Go to older text state about {N} seconds before.
{N}m Go to older text state about {N} minutes before.
{N}h Go to older text state about {N} hours before.
{N}d Go to older text state about {N} days before
Diffstat (limited to 'text.c')
| -rw-r--r-- | text.c | 38 |
1 files changed, 30 insertions, 8 deletions
@@ -647,14 +647,36 @@ static size_t history_traverse_to(Text *txt, Action *a) { return pos; } -size_t text_earlier(Text *txt) { - Action *earlier = txt->history->earlier; - return history_traverse_to(txt, earlier); -} - -size_t text_later(Text *txt) { - Action *later = txt->history->later; - return history_traverse_to(txt, later); +size_t text_earlier(Text *txt, int count) { + Action *a = txt->history; + while (count-- > 0 && a->earlier) + a = a->earlier; + return history_traverse_to(txt, a); +} + +size_t text_later(Text *txt, int count) { + Action *a = txt->history; + while (count-- > 0 && a->later) + a = a->later; + return history_traverse_to(txt, a); +} + +size_t text_restore(Text *txt, time_t time) { + Action *a = txt->history; + while (time < a->time && a->earlier) + a = a->earlier; + while (time > a->time && a->later) + a = a->later; + time_t diff = labs(a->time - time); + if (a->earlier && a->earlier != txt->history && labs(a->earlier->time - time) < diff) + a = a->earlier; + if (a->later && a->later != txt->history && labs(a->later->time - time) < diff) + a = a->earlier; + return history_traverse_to(txt, a); +} + +time_t text_state(Text *txt) { + return txt->history->time; } bool text_save(Text *txt, const char *filename) { |
