From 06dd84d6da3b9cfe5d4ed3c274ee9659e7c68129 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 18 Feb 2024 12:59:07 +0530 Subject: [PATCH] Ensure event loop ticks ASAP when there is pending input --- kitty/child-monitor.c | 2 +- kitty/vt-parser.c | 3 ++- kitty/vt-parser.h | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/kitty/child-monitor.c b/kitty/child-monitor.c index 454b73ede..54ef85586 100644 --- a/kitty/child-monitor.c +++ b/kitty/child-monitor.c @@ -443,7 +443,7 @@ do_parse(ChildMonitor *self, Screen *screen, monotonic_t now, bool flush) { if (screen->paused_rendering.expires_at) { set_maximum_wait(MAX(0, screen->paused_rendering.expires_at - now)); } else set_maximum_wait(OPT(input_delay) - pd.time_since_new_input); - } + } else if (pd.has_pending_input) set_maximum_wait(OPT(input_delay) - pd.time_since_new_input); return pd.input_read; } diff --git a/kitty/vt-parser.c b/kitty/vt-parser.c index 1c69ff1a8..6a160763a 100644 --- a/kitty/vt-parser.c +++ b/kitty/vt-parser.c @@ -1384,7 +1384,8 @@ run_worker(void *p, ParseData *pd, bool flush) { PS *self = (PS*)screen->vt_parser->state; with_lock { self->read.sz += self->write.pending; self->write.pending = 0; - if (self->read.pos < self->read.sz) { + pd->has_pending_input = self->read.pos < self->read.sz; + if (pd->has_pending_input) { pd->time_since_new_input = pd->now - self->new_input_at; if (flush || pd->time_since_new_input >= OPT(input_delay) || self->read.sz + 16 * 1024 > BUF_SZ) { pd->input_read = true; diff --git a/kitty/vt-parser.h b/kitty/vt-parser.h index 7d0a15d36..141a4daa7 100644 --- a/kitty/vt-parser.h +++ b/kitty/vt-parser.h @@ -20,7 +20,7 @@ typedef struct ParseData { PyObject *dump_callback; monotonic_t now; - bool input_read, write_space_created; + bool input_read, write_space_created, has_pending_input; monotonic_t time_since_new_input; } ParseData;