From c08523a1adb6ca2693f073f4ed045fd8a4d9b055 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 18 Feb 2024 12:02:24 +0530 Subject: [PATCH] Fix --dump-bytes duplicating bytes because of input_delay --- kitty/vt-parser.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/kitty/vt-parser.c b/kitty/vt-parser.c index 34044162f..7b345c4ca 100644 --- a/kitty/vt-parser.c +++ b/kitty/vt-parser.c @@ -1384,20 +1384,13 @@ 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; -#ifdef DUMP_COMMANDS - self->window_id = screen->window_id; - if (self->read.consumed < self->read.sz && pd->dump_callback) { - RAII_PyObject(mv, PyMemoryView_FromMemory((char*)self->buf + self->read.consumed, self->read.sz - self->read.consumed, PyBUF_READ)); - PyObject *ret = PyObject_CallFunction(pd->dump_callback, "KsO", screen->window_id, "bytes", mv); - if (ret) { Py_DECREF(ret); } else { PyErr_Clear(); } - } -#endif if (self->read.pos < self->read.sz) { 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; self->dump_callback = pd->dump_callback; self->now = pd->now; self->screen = screen; + self->read.consumed = 0; do { end_with_lock; { consume_input(self); @@ -1406,11 +1399,15 @@ run_worker(void *p, ParseData *pd, bool flush) { } while (self->read.pos < self->read.sz); self->new_input_at = 0; if (self->read.consumed) { +#ifdef DUMP_COMMANDS + RAII_PyObject(mv, PyMemoryView_FromMemory((char*)self->buf + self->read.pos - self->read.consumed, self->read.consumed, PyBUF_READ)); + PyObject *ret = PyObject_CallFunction(pd->dump_callback, "KsO", screen->window_id, "bytes", mv); + if (ret) { Py_DECREF(ret); } else { PyErr_Clear(); } +#endif pd->write_space_created = self->read.sz >= BUF_SZ; self->read.pos -= MIN(self->read.pos, self->read.consumed); self->read.sz -= MIN(self->read.sz, self->read.consumed); if (self->read.sz) memmove(self->buf, self->buf + self->read.consumed, self->read.sz); - self->read.consumed = 0; } } }