Cuando parte de un defun,
(interactive "c(C)hoose (A)n (O)ption")
le pedirá al usuario un solo carácter; RETno es requerido. ¿Cómo puedo replicar este comportamiento de lectura sin la necesidad de hacerlo interactive?
                    
                        minibuffer
                                interactive
                                
                    
                    
                        Sean Allred
fuente
                
                
            fuente

read-char-choiceAdemás de las formas integradas para leer eventos individuales como
read-charyread-char-exclusive, aquí hay una opción para leer un solo carácter, pero también especificar qué caracteres son de entrada aceptable:Por lo tanto, todo lo siguiente aceptará "C", "A" u "O":
Y aquí hay una forma de ejemplo de bucle para la entrada correcta en una
responsevariable:fuente
read-char-choiceuno que lee uno de un conjunto de caracteres dado.call-interactivelyes lo que interpreta la(interactive "cPROMPT")especificación, lacopción se envía aread-char. Por lo tanto, lo siguiente debería funcionar en un contexto no interactivo:fuente
La pregunta fue respondida hace mucho tiempo, pero esta respuesta adicional puede proporcionar alguna ayuda a otros buscadores.
read-char-choicele permite especificar una lista de opciones. El fn no volverá hasta que el usuario seleccione una de esas opciones válidas.En el caso degenerado en el que las opciones son simplemente Y o N (no distingue entre mayúsculas y minúsculas), existe
y-or-n-p.Ambos
read-char-choiceyy-or-n-pson rígidos, e insisten en una respuesta válida. En el primer caso, debe ser una de las opciones que especifique (como A, B o C en mi ejemplo), y en el último caso, debe ser Y o N. Si el usuario presiona Intro o cualquier otra tecla,y-or-n-pvolverá a preguntar. Elread-char-choicesolo se sentará allí, en silencio. Ninguno de los dos proporciona una manera de devolver un valor predeterminado. Para obtener ese comportamiento, creo que debes construir tu propia interacción conread-charoread-key.En mi experiencia, el problema con
read-charyread-keysolo es que, si bien muestran la solicitud en el minibúfer, el cursor permanece en el búfer de edición principal. Esto es desorientador para el usuario y también es diferente al comportamiento deread-string.Para evitar ESO, puede dejar que la variable
cursor-in-echo-areaantes de llamarread-keymuestre el cursor en el minibúfer.fuente