From 8a72c2566f711aceb7e3df2bf751a03c9ae14e1a Mon Sep 17 00:00:00 2001 From: fuleinist Date: Thu, 16 Apr 2026 10:09:11 +0800 Subject: [PATCH] fix: skip full-screen clear in fullscreen mode to prevent flicker In fullscreen mode, write_canvas() already overwrites every row and emits CSI K (erase to end of line) for each row. The full clear was redundant and caused visible flicker on rapid state changes with dense per-cell styling. This matches the approach described in PR #190 from djordjeglbvc. Fixes: #190 --- packages/iocraft/src/terminal.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/iocraft/src/terminal.rs b/packages/iocraft/src/terminal.rs index a0cce93..012d607 100644 --- a/packages/iocraft/src/terminal.rs +++ b/packages/iocraft/src/terminal.rs @@ -210,6 +210,12 @@ impl TerminalImpl for StdTerminal<'_> { return Ok(()); } } + } else { + // In fullscreen mode, skip the full clear to prevent flicker. + // write_canvas() overwrites every row and emits CSI K for each row, + // so a clear is redundant and causes visible flicker on rapid updates. + self.dest.queue(cursor::MoveTo(0, 0))?; + return Ok(()); } clear_canvas_inline(&mut *self.dest, self.prev_canvas_height)