diff --git a/kitty/screen.c b/kitty/screen.c index 784791fe7..202f3e9a0 100644 --- a/kitty/screen.c +++ b/kitty/screen.c @@ -1805,7 +1805,7 @@ screen_cursor_position(Screen *self, unsigned int line, unsigned int column) { line += self->margin_top; line = MAX(self->margin_top, MIN(line, self->margin_bottom)); } - self->cursor->position_changed_by_client_at = monotonic(); + self->cursor->position_changed_by_client_at = self->parsing_at; self->cursor->x = column; self->cursor->y = line; screen_ensure_bounds(self, false, in_margins); } diff --git a/kitty/screen.h b/kitty/screen.h index ff3db26b5..e93eba7b0 100644 --- a/kitty/screen.h +++ b/kitty/screen.h @@ -173,6 +173,7 @@ typedef struct { } paused_rendering; CharsetState charset; ListOfChars *lc; + monotonic_t parsing_at; } Screen; diff --git a/kitty/vt-parser.c b/kitty/vt-parser.c index 78bc86470..df789d1b0 100644 --- a/kitty/vt-parser.c +++ b/kitty/vt-parser.c @@ -1417,6 +1417,7 @@ static void run_worker(void *p, ParseData *pd, bool flush) { Screen *screen = (Screen*)p; PS *self = (PS*)screen->vt_parser->state; + screen->parsing_at = pd->now; with_lock { self->read.sz += self->write.pending; self->write.pending = 0; pd->has_pending_input = self->read.pos < self->read.sz;