refactor(sleep): simplify rube goldberg implementation of :sleep

As neovim does have event handling, we are checking for CTRL-C
all the time, not once per second.

Also, do_sleep() reimplements the same loop as
LOOP_PROCESS_EVENTS_UNTIL() already contains internally. Fix the latter
to use the right integer type, so we do not need the extra indirection.
This commit is contained in:
bfredl
2022-12-30 19:49:59 +01:00
parent 4ace9e7e41
commit 09370eae77
4 changed files with 7 additions and 11 deletions

View File

@@ -5658,15 +5658,11 @@ static void ex_sleep(exarg_T *eap)
do_sleep(len);
}
/// Sleep for "msec" milliseconds, but keep checking for a CTRL-C every second.
/// Sleep for "msec" milliseconds, but return early on CTRL-C.
void do_sleep(long msec)
{
ui_flush(); // flush before waiting
for (long left = msec; !got_int && left > 0; left -= 1000L) {
int next = left > 1000L ? 1000 : (int)left;
LOOP_PROCESS_EVENTS_UNTIL(&main_loop, main_loop.events, (int)next, got_int);
os_breakcheck();
}
LOOP_PROCESS_EVENTS_UNTIL(&main_loop, main_loop.events, msec, got_int);
// If CTRL-C was typed to interrupt the sleep, drop the CTRL-C from the
// input buffer, otherwise a following call to input() fails.