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))))))
|
(subseq f 0 (1- f))))))
|
||||||
(t nil)))
|
(t nil)))
|
||||||
(on-key ch)))
|
(on-key ch)))
|
||||||
;; v0.8.0: only printable characters reach on-key; prevents
|
;; v0.8.0: typecase converts integers to characters
|
||||||
;; ctrl-byte keywords (e.g. :CTRL-A) from matching keymaps
|
;; so ctrl-byte keywords (:CTRL-A) are rejected
|
||||||
(t (when (characterp ch)
|
(t (let ((chr (typecase ch
|
||||||
(if cl-tty.dialog:*dialog-stack*
|
(character ch)
|
||||||
(let* ((dlg (car cl-tty.dialog:*dialog-stack*))
|
((integer 32 126) (code-char ch))
|
||||||
(sel (cl-tty.dialog:dialog-content dlg)))
|
(t nil))))
|
||||||
(when (graphic-char-p ch)
|
(when chr
|
||||||
(setf (cl-tty.select:select-filter sel)
|
(if cl-tty.dialog:*dialog-stack*
|
||||||
(concatenate 'string
|
(let* ((dlg (car cl-tty.dialog:*dialog-stack*))
|
||||||
(or (cl-tty.select:select-filter sel) "")
|
(sel (cl-tty.dialog:dialog-content dlg)))
|
||||||
(string ch)))))
|
(when (graphic-char-p chr)
|
||||||
(on-key ch :code (char-code ch))))))))))
|
(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)
|
;; Keyboard reader via read-raw-byte (proven CSI detection)
|
||||||
(handler-case
|
(handler-case
|
||||||
(let* ((b (cl-tty.input::read-raw-byte :timeout 0.1))
|
(let* ((b (cl-tty.input::read-raw-byte :timeout 0.1))
|
||||||
|
|||||||
Reference in New Issue
Block a user