v0.8.0: use typecase guard instead of characterp — integers from reader must be converted via code-char
(characterp 97) is NIL so (when (characterp ch) ...) broke all printable input. The typecase ((integer 32 126) ...) converts printable integer bytes to characters while rejecting keywords like :CTRL-A.
This commit is contained in:
@@ -977,18 +977,22 @@ Returns T on success, nil on failure. Does NOT wait or retry."
|
||||
(subseq f 0 (1- f))))))
|
||||
(t nil)))
|
||||
(on-key ch)))
|
||||
;; v0.8.0: only printable characters reach on-key; prevents
|
||||
;; ctrl-byte keywords (e.g. :CTRL-A) from matching keymaps
|
||||
(t (when (characterp ch)
|
||||
(if cl-tty.dialog:*dialog-stack*
|
||||
(let* ((dlg (car cl-tty.dialog:*dialog-stack*))
|
||||
(sel (cl-tty.dialog:dialog-content dlg)))
|
||||
(when (graphic-char-p ch)
|
||||
(setf (cl-tty.select:select-filter sel)
|
||||
(concatenate 'string
|
||||
(or (cl-tty.select:select-filter sel) "")
|
||||
(string ch)))))
|
||||
(on-key ch :code (char-code ch))))))))))
|
||||
;; v0.8.0: typecase converts integers to characters
|
||||
;; so ctrl-byte keywords (:CTRL-A) are rejected
|
||||
(t (let ((chr (typecase ch
|
||||
(character ch)
|
||||
((integer 32 126) (code-char ch))
|
||||
(t nil))))
|
||||
(when chr
|
||||
(if cl-tty.dialog:*dialog-stack*
|
||||
(let* ((dlg (car cl-tty.dialog:*dialog-stack*))
|
||||
(sel (cl-tty.dialog:dialog-content dlg)))
|
||||
(when (graphic-char-p chr)
|
||||
(setf (cl-tty.select:select-filter sel)
|
||||
(concatenate 'string
|
||||
(or (cl-tty.select:select-filter sel) "")
|
||||
(string chr)))))
|
||||
(on-key chr :code (when (integerp ch) ch)))))))))))
|
||||
;; Keyboard reader via read-raw-byte (proven CSI detection)
|
||||
(handler-case
|
||||
(let* ((b (cl-tty.input::read-raw-byte :timeout 0.1))
|
||||
|
||||
Reference in New Issue
Block a user