parent nodes: EmacsApuntes
Emacs Lisp
An Introduction to Programming in Emacs Lisp
3 How To Write Function Definitions
(defun FUNCTION-NAME (ARGUMENTS...)
"OPTIONAL-DOCUMENTATION..."
(interactive ARGUMENT-PASSING-INFO) ; optional
BODY...)
1.- defun indica que empieza una definición de función
2.- Nombre de la función, puede contener meta-caracteres
3.- Argumentos entre paréntesis (es una lista), si no hay args "()" lista vacía
4.- Documentación para describir la función (opcional), 1 línea no tabulada para que quede bien al mostrarla en `apropos' o `C-h f' (`describe-function')
5.- Expresión interactividad para poder usar la función con `M-x' y el nombre de la función o con combinación de teclas
6.- Código de la función
Ejemplo (defun multiply-by-seven (number)
"Multiply NUMBER by seven."
(* 7 number))
(multiply-by-seven 3)
21
3.2 Install a Function Definition
Tras escribir una función hay que instalarla para que tenga efecto.
Al evaluar (C-x C-e) la definición de una función queda instalada hasta que emacs se cierre.
Al modificar una función ya instalada, habrá que volver a evaluarla para instalar la nueva versión.
3.3 Make a Function Interactive
Escribir tras la documentación una lista que empiece por `interactive'.
Las funciones interactivas son ejecutadas por el usuario con una combinación de teclas o usando `M-x' y el nombre de la función.
Por ejemplo: `C-x h' para `mark-whole-buffer'.
Al llamar a una función interactivamente no se retorna su valor de forma automática, ya que muchas veces interesa su efecto lateral, como marcar el buffer y no el valor retornado.
(defun multiply-by-seven (number) ; Interactive version.
"Multiply NUMBER by seven."
(interactive "p")
(message "The result is %d" (* 7 number)))
"p" indica que hay que pasarle el predicado a la función como el argumento.
Los predicados se introducen con `C-u'
`C-u' 8 `M-x multiply-by-seven'
56
La función `message' formatea la cadena y la imprime en el mini buffer
3.4 Different Options for `interactive'
=======================================
VOY POR AQUÍ
3.5 Install Code Permanently
Hay tres formas de lograrlo:
* Si el código es para uso propio y exclusivo, se puede añadir a tu propio .emacs
* Escribir todo el código en un fichero y usar la función `load' para que emacs las cargue y evalúe
* Si el código es para compartir por varios ordenadores hay que ponerlo en un fichero llamado `site-init.el' que se carga y al construir emacs, eso hace que el código esté disponible para cualquier usuario de ese ordenador.
* Si el código es útil para la comunidad, se puede licenciarlo adecuadamente y donarlo a la FSF para que lo incluyan en la siguiente versión.