2008-12-18 17 views

Respuesta

18

I significa que está incluyendo algún código para las cosas que necesita para hacer que una función se pueda llamar cuando está vinculada a una tecla, cosas como obtener el argumento de CTRL-u.

Tenga una mirada en CTRL-h f interactive para más detalles:

 
    interactive is a special form in `C source code'. 
    (interactive args) 

    Specify a way of parsing arguments for interactive use of a function. 
    For example, write 
     (defun foo (arg) "Doc string" (interactive "p") ...use arg...) 
    to make ARG be the prefix argument when `foo' is called as a command. 
    The "call" to `interactive' is actually a declaration rather than a function; 
    it tells `call-interactively' how to read arguments 
    to pass to the function. 
    When actually called, `interactive' just returns nil. 

    The argument of `interactive' is usually a string containing a code letter 
    followed by a prompt. (Some code letters do not use I/O to get 
    the argument and do not need prompts.) To prompt for multiple arguments, 
    give a code letter, its prompt, a newline, and another code letter, etc. 
    Prompts are passed to format, and may use % escapes to print the 
    arguments that have already been read. 
23

sólo para aclarar (que se encuentra en los documentos citados that Charlie cites) (interactive) no es sólo para las funciones clave determinada, sino para cualquier función. Sin (interactive), solo se puede llamar mediante programación, no desde M-x (o mediante el enlace de clave).

EDIT: Tenga en cuenta que simplemente agregando "(interactivo)" a una función no necesariamente hará que funcione de esa manera, tampoco; podría haber muchas razones por las que las funciones no son interactivas. Scoping, dependencias, parámetros, etc.

12

Además, vale la pena mencionar que el propósito principal de interactive en un contexto interactivo (por ejemplo, cuando el usuario llama a la función con enlace de clave) permite al usuario especificar argumentos funcionales que de otro modo solo podrían proporcionarse mediante programación .

Por ejemplo, considere la función sum devuelve la suma de dos números.

(defun sum (a b) 
    (+ a b)) 

Usted puede llamarlo por (sum 1 2) pero puede hacerlo sólo en un programa Lisp (o en un REPL). Si usa el formulario especial interactive en su función, puede pedirle al usuario los argumentos.

(defun sum (a b) 
    (interactive 
    (list 
    (read-number "First num: ") 
    (read-number "Second num: "))) 
    (+ a b)) 

Ahora M-x sum le permitirá escribir dos números en el minibúfer, y todavía se puede hacer (sum 1 2) también.

interactive debe devolver una lista que se usaría como lista de argumentos si la función se llama interactivamente.

+0

Török, ¿Qué pasa si quiero poner a prueba el valor de los argumentos antes de pedir otra ¿pregunta? http://stackoverflow.com/questions/25447312/emacs-lisp-how-to-use-interactive-for-conditional-arguments – yPhil

2

(interactivo) es para funciones destinadas a interactuar con el usuario, ya sea a través de M-x oa través de combinaciones de teclas.

Mx describe-function RET RET interactivo para obtener información detallada sobre cómo usarlo, incluyendo parámetros para atrapar cadenas, enteros, nombres de amortiguación, etc.

Cuestiones relacionadas