Fix: ESC[2J aus Frame-Rendering entfernt verhindert Scrollback

ESC[2J schiebt in iTerm2 den Bildschirminhalt bei jedem Aufruf
in den Scrollback-Puffer – 10x/Sekunde. Da render() ohnehin
jede Zelle überschreibt, genügt ESC[H (Cursor-Home).
This commit is contained in:
rene 2026-03-29 11:10:50 +02:00
parent 7c1f401a9b
commit 0ca2bf109d

View file

@ -121,10 +121,9 @@ class Canvas:
self._ck[row][col] = ck self._ck[row][col] = ck
def render(self) -> str: def render(self) -> str:
# \033[2J clears the entire terminal (not just our canvas width), # \033[H homes the cursor; every cell is rewritten below so \033[2J is
# preventing stale characters when the terminal is wider than self.cols # not needed and would push content into the scrollback on every frame.
# or after a resize. The full-canvas overwrite below keeps flicker minimal. parts = ["\033[H", RESET]
parts = ["\033[2J\033[H", RESET]
sentinel = object() sentinel = object()
last_ck: object = sentinel last_ck: object = sentinel
for r in range(self.rows): for r in range(self.rows):