tutorial source program para mac how descargar code emacs lisp

program - emacs source code



¿Qué significa(interactivo) en una función Emacs Lisp? (4)

(interactivo) es para funciones destinadas a interactuar con el usuario, ya sea a través de Mx o mediante combinaciones de teclas.

Mx describe-función RET interactivo RET para obtener información detallada sobre cómo usarlo, incluido el parámetro para capturar cadenas, enteros, nombres de buffer, etc.

La función de Emacs Lisp a menudo comienza así:

(lambda () (interactive) ...

¿Qué hace "(interactivo)"?


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

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

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

Puedes llamarlo por (sum 1 2) pero puedes hacerlo solo 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 Mx sum te permitirá escribir dos números en el minibúfer, y aún puedes hacer (sum 1 2) también.

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


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

Eche un vistazo a CTRL-h f interactive para obtener más información:

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.


Solo para aclararlo (es en los documentos citados que Charlie cita ) (interactive) no es solo para funciones ligadas a teclas, sino para cualquier función. Sin (interactive) , solo se puede llamar mediante programación, no desde Mx (o mediante vinculación de clave).

EDITAR: Tenga en cuenta que simplemente agregar "(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.