fix: remove per-call finish-output from backend-write (flush once per frame via end-sync)

backend-write flushed output after every single draw-text/draw-rect
call, causing hundreds of individual flushes per frame. This caused
visible flicker on slow terminals.

Remove finish-output from backend-write — all critical flush points
(initialize-backend, shutdown-backend, enable-mouse, enable-bracketed-paste,
end-sync) already call finish-output explicitly.

DECICM sync (begin-sync/end-sync) wraps every frame boundary,
making the frame render atomically with a single flush at end-sync.
This commit is contained in:
2026-05-14 19:36:21 -04:00
parent 916f473107
commit bb579be207
4 changed files with 6 additions and 10 deletions

View File

@@ -886,16 +886,14 @@ a hard-coded 80x24 at the end:
*** Backend Write (Simple)
Writes a string to the backend's output stream, forces the stream to
flush, and returns the length of the string. Uses ~finish-output~ to
ensure the data is actually sent, which matters for pipe and network
output.
Writes a string to the backend's output stream and returns its length.
Does NOT flush — explicit sync points (~initialize-backend~,
~end-sync~, etc.) call ~finish-output~ as needed.
#+BEGIN_SRC lisp :tangle ../src/backend/simple.lisp
(defmethod backend-write ((b simple-backend) string)
(let ((stream (backend-output-stream b)))
(write-string string stream)
(finish-output stream)
(length string)))
#+END_SRC