Lendo um caractere sem a necessidade do botão Enter pressionado
read-line
eread-char
ambos exigem que você pressione a tecla Enter depois de digitar alguma coisa. Existe algum mecanismo no Common Lisp que permita que o programa continue pressionando um único caractere imediatamente, sem exigir a etapa adicional de pressionar Enter?
Estou tentando criar uma interface de entrada de texto dinâmica e rápida para um programa, para que os usuários possam navegar rapidamente e fazer coisas diferentes pressionando números ou letras correspondentes aos menus na tela. Todas as pressões extras da tecla Enter interrompem seriamente o fluxo de trabalho. Isso também seria semelhante a um tipo de interrogação "y / n" em um prompt, onde apenas pressionar "y" ou "n" é suficiente.
Estou usando o SBCL, se isso faz diferença. Talvez isso seja específico da implementação, pois tentei os dois exemplos emesta página e não funciona (ainda preciso pressionar Enter); aqui está o primeiro:
(defun y-or-n ()
(clear-input *standard-input*)
(loop as dum = (format t "Y or N for yes or no: ")
as c = (read-char)
as q = (and (not (equal c #\n)) (not (equal c #\y)))
when q do (format t "~%Need Y or N~%")
unless q return (if (equal c #\y) 'yes 'no)))