fix: remove CSI 18t terminal query (read-char-no-hang on fd 0 never returns)

The %query-terminal-size function sent \033[18t and tried to read
the response via read-char-no-hang on fd 0, which always returns nil
in this SBCL environment. The response leaked into user input,
displaying garbled CSI sequences. Rely on ioctl only.
This commit is contained in:
2026-05-14 09:32:25 -04:00
parent 14b41831c3
commit b80bd77d84
3 changed files with 0 additions and 33 deletions

View File

@@ -1,36 +1,5 @@
(in-package :cl-tty.backend)
(defun %query-terminal-size ()
"Query terminal size via ANSI CSI 18 t and parse the response.
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)
(loop with deadline = (+ (get-internal-real-time)
(* internal-time-units-per-second 0.2))
while (< (get-internal-real-time) deadline)
do (let ((ch (read-char-no-hang saved nil nil)))
(when ch
(vector-push-extend ch response)
(when (char= ch #\t) (return)))))
(when (>= (length response) 8)
(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 () ())
(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
(sb-alien:deref winsize 0))) ;; rows
(sb-alien:free-alien winsize))))
(%query-terminal-size)
(values 80 24)))
(defmethod backend-write ((b modern-backend) string)

View File

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