2010-12-21 25 views
6

Soy nuevo en Emacs y estoy tratando de escribir algunas funciones de Emacs Lisp.Elisp: Pedir sí o no en los comandos interactivos

Me gustaría escribir una función que toma dos parámetros y puede manejar ser interactiva. Sin embargo, uno de los parámetros es un booleano; sería perfecto si pudiera usar (y-or-no-p), pero (interactive) no parece tener un código de carácter para eso.

¿Alguna idea?

Actualización: estoy usando GNU Emacs 23.

Además, aquí es lo que mi función se ve como hasta ahora:

(defun foo (str bool) 
    (interactive "sSome text: \nsDo the thing?") 
    (some-func str) 
    (if bool (some-other-func str))) 
+3

Cuando una función toma un parámetro booleano, es común en Emacs a utilizar el argumento prefijo para que ('(interactive "sSome texto: \ nP")', no hay ningún indicador adicional). Esto proporciona una mejor experiencia de usuario (una solicitud menos en el caso más común, más consistente con los comandos básicos de Emacs). Presione 'C-u' o' M-1' cualquiera de muchas otras combinaciones de argumentos de prefijos antes del comando para pasar 't', no lo haga para pasar' nil'. Arregle que 'nil' sea el caso común. – Gilles

+0

Interesante. Gracias, Gilles! (Debería responder con eso y el código para poder aceptarlo como la respuesta.) –

Respuesta

10

Ah, lo encontré.

(defun foo (str bool) 
    (interactive 
    (list (read-string "Some text: ") 
      (y-or-n-p "Do the thing? "))) 
    (some-func str) 
    (if bool (some-other-func str))) 
1

No estoy seguro de lo que estás pidiendo, pero puedo No encuentras una función llamada y-o-no-p. ¿Querías decir sí o no?

Eso parece hacer lo que esperaría.

+0

'y-or-no-p' es una versión más corta de' yes-or-no-p', al menos en Emacs 23. –

+3

'y-or-np' (' n', not 'no') le pide al usuario que escriba' y' o 'n', mientras que' yes-o-no-p' requiere la palabra completa ('yes 'o' no') seguido de Enter. – Gilles

+0

Obviamente un error tipográfico. La pregunta hecha sobre 'y-o-no-p'. – Mikel

Cuestiones relacionadas