diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2016-11-16 23:42:26 +0100 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2016-11-16 23:42:26 +0100 |
| commit | a599a60c543d38c6b803702d2fc991e3d7ab0b6c (patch) | |
| tree | 3cdecf6786b16c9ebccf606ca5585f9ffa3b9cb6 /vis.c | |
| parent | 4707fed2a21f4836b0eba28135040c3a456c9da9 (diff) | |
| download | vis-a599a60c543d38c6b803702d2fc991e3d7ab0b6c.tar.gz vis-a599a60c543d38c6b803702d2fc991e3d7ab0b6c.tar.xz | |
vis: treat vis_keys_feed input like a macro replay
We need to push keys individually to the input queue such that
the state machine can advance and record keys into the operator
macro if necessary.
Previously feeding the following input:
isome text<Escape>.
would not work as expected because the complete key stream
was pushed to the input queue at the same time during which
the operator macro was not yet active. Thus the dot command
at the end would have nothing to repeat.
Diffstat (limited to 'vis.c')
| -rw-r--r-- | vis.c | 9 |
1 files changed, 8 insertions, 1 deletions
@@ -930,7 +930,14 @@ static void vis_keys_process(Vis *vis, size_t pos) { } void vis_keys_feed(Vis *vis, const char *input) { - vis_keys_push(vis, input, buffer_length0(vis->keys), false); + if (!input) + return; + Macro macro; + macro_init(¯o); + if (!macro_append(¯o, input)) + return; + macro_replay(vis, ¯o); + macro_release(¯o); } static void vis_keys_push(Vis *vis, const char *input, size_t pos, bool record) { |
