fix: remove %query-terminal-size completely

The CSI 18t query leaks into the threaded keyboard reader because
the response arrives on stdin after the reader thread starts. The
response bytes get queued as key events and inserted as text into
the TUI input buffer. Removing the query entirely — ioctl is
sufficient for terminal size detection on all modern terminals.
This commit is contained in:
2026-05-14 11:22:12 -04:00
parent 920545dafb
commit 7cdb556531
3 changed files with 0 additions and 33 deletions

View File

@@ -1,36 +1,5 @@
(in-package :cl-tty.backend) (in-package :cl-tty.backend)
(defun %query-terminal-size ()
"Query terminal size via ANSI CSI 18 t using blocking read.
Returns (values cols rows) or nil."
(ignore-errors
(let* ((saved (sb-sys:make-fd-stream 0 :input t :buffering :none))
(response (make-array 0 :element-type 'character
:fill-pointer 0 :adjustable t)))
(format t "~C[18t" #\Esc)
(force-output)
(handler-case
(sb-ext:with-timeout 0.3
(loop do (let ((ch (read-char saved nil nil)))
(when ch
(vector-push-extend ch response)
(when (char= ch #\t) (return))))))
(sb-ext:timeout ()))
(when (>= (length response) 5)
(let* ((str (subseq response 1))
(start (or (position #\[ str) 0))
(after (subseq str (1+ start)))
(semi (position #\; after)))
(when semi
(let* ((cols-start (1+ semi))
(cols-end (position #\t after :start cols-start))
(rows (parse-integer (subseq after 0 semi) :junk-allowed t))
(cols (when cols-end
(parse-integer (subseq after cols-start cols-end)
:junk-allowed t))))
(when (and rows cols (> rows 0) (> cols 0))
(values cols rows)))))))))
(defclass backend () ()) (defclass backend () ())
(defgeneric initialize-backend (backend) (defgeneric initialize-backend (backend)

View File

@@ -175,7 +175,6 @@ as a fallback when a keyword is not in *named-colors*.")
(values (sb-alien:deref winsize 1) ;; cols (values (sb-alien:deref winsize 1) ;; cols
(sb-alien:deref winsize 0))) ;; rows (sb-alien:deref winsize 0))) ;; rows
(sb-alien:free-alien winsize)))) (sb-alien:free-alien winsize))))
(%query-terminal-size)
(values 80 24))) (values 80 24)))
(defmethod backend-write ((b modern-backend) string) (defmethod backend-write ((b modern-backend) string)

View File

@@ -39,7 +39,6 @@
(values (sb-alien:deref winsize 1) (values (sb-alien:deref winsize 1)
(sb-alien:deref winsize 0))) (sb-alien:deref winsize 0)))
(sb-alien:free-alien winsize)))) (sb-alien:free-alien winsize))))
(%query-terminal-size)
(values 80 24))) (values 80 24)))
(defmethod backend-write ((b simple-backend) string) (defmethod backend-write ((b simple-backend) string)