Mar 10 2009

Ayuda y documentación en emacs

Tag: basicoverdrive @ 12:28 am

La ayuda y/o documentación de emacs la podemos dividir en 4 o 5 partes básicas que son; el tutorial, apropos, info, el manual y el faq.

Ayuda – El tutorial

C-h t : ‘help-with-tutorial‘; lanza el tutorial.
C-h C-h o C-h ? : ‘help-for-help‘; ayuda de la ayuda.
C-h c : ‘describe-key-briefly‘; describe un keystroke dado de manera breve.
C-h k : ‘describe-key‘; describe un keystroke dado de manera extendida.
C-h f : ‘describe-function‘; describe que acción realiza una función.
C-h v : ‘describe-variable‘; describe para que se emplean variables definidas en emacs, pudiendo así luego modificar su valor y por ende su comportamiento.
C-h m : ‘describe-mode‘; describe el modo actual así como muestra todos los keystrokes específicos para dicho modo.
C-h b : ‘describe-bindings‘; describe los keystrokes generales, así como los específicos y su forma natural de prefijos.
C-h w : ‘where-is‘; muestra en que keystroke esta mapeada una función.
C-h s : ‘describe-syntax‘; describe la sintaxis empleada que se usa para definir keystrokes.
C-h l : ‘view-lossage‘; muestra los ultimos 100 caracteres escritos.
C-h e : ‘view-echo-area-messages‘; muestra los mensajes aparecidos en el minibuffer en la sesión actual.

Ayuda – Apropos

C-x _ o C-x u : ‘undo‘; deshace la última tarea.
C-h a : ‘apropos-command‘; hace apropos de las funciones, es decir busca un listado de funciones según una cadena o parte de ella dada.
(sin keystroke asociada) : ‘apropos-variable‘; hace apropos de las variables, es decir busca un listado de variables según una cadena o parte de ella dada.
(sin keystroke asociada) : ‘apropos-value‘; hace apropos de las variables que referencian dicho valor especificado.
(sin keystroke asociada) : ‘apropos-documentation‘; hace apropos de la documentación.
(sin keystroke asociada) : ‘apropos‘; hace apropos para funciones y variables.

Ayuda – info

C-h i : entra en info.

h : para ayuda.
SPC : mueve el scroll hacia abajo.
u u : se mueve un nivel hacia arriba.
t : se desplaza al top de este nivel.
i : para búsqueda.
, : se desplaza a la siguiente macro relacionada con este comando.
l : hace info del último buscado.
TAB o n : siguiente referencia.
p : referencia previa.
u : hace info de up (arriba).
m : info menu.
q : info quit.
s : info search.
g : goto node.

Manual e información general

C-h r : emacs manual.
C-h F : ‘info-goto-emacs-command-node‘; hace info de un comando dado.
C-h K : ‘info-goto-emacs-key-node‘; hace info de un keystroke dado.
C-h C-f : muestra la FAQ.
C-h n : ‘view-emacs-news‘; muestra las últimas noticias sobre emacs.
(sin keystroke asociada) : ‘emacs-index-search‘ : hace búsquedas relacionadas con emacs.
(sin keystroke asociada) : ‘elisp-index-search‘ : hace búsquedas relacionadas con elisp.
(sin keystroke asociada) : ‘search-emacs-glossary‘; muestra el nodo del glosario de info.
C-h : ‘view-order-manuals‘; muestra informació sobre la compra de manuales en papel.
C-h p : ‘finder-by-keyword‘; muestra informació sobre los paquetes lisp disponibles en el sistema.
C-h C-c : ‘describe-copying‘; muestra la licencia de emacs (GPL).
C-h C-d : ‘describe-distribution‘; muestra información sobre comprar emacs de la Free Software Foundation (FSF).
C-h C-p : ‘describe-project‘; muestra información del proyecto GNU.
C-h C-w : ‘describe-no-warranty‘; muestra la no-garantía de emacs.
C-h C-t : ‘view-todo‘; muestra las tareas TODO (a hacer) para contruibuir con el proyecto.
C-h C-e : ‘view-emacs-problems‘; muestra un listado de problemas conocidos en emacs.
C-h h : ‘view-hello-file‘; muestra el fichero HELLO en la mayorían de lenguajes disponibles.
C-h L : ‘describe-language-environment‘; muestra información sobre como son soportados los lenguajes bajo emacs.
C-h C-\ : ‘describe-input-method‘; muestra el método de introducción actual o la lista completa mediante TAB.
C-h C : ‘describe-coding-system‘; muestra el sistema de encoding actual o la lista completa mediante TAB.

Ayuda – completion

TAB : autocompleta la cadena a ser escrita, si existe más de una opción y se pulsa 2 veces, muestra la lista de posibles opciones.
SPC : autocompleta la cadena a ser escrita hasta el siguiente carácter de puntuación.
? : Lista las posibles opciones de autocompletado en *Completions* buffer.

Para ignorar las extensiones de un fichero podemos invocar a completion-ignored-extensions o bien añadir a nuestro .emacs:

(setq completion-ignore-extensions
(cons «.ps» completion-ignored-extensions))

Recordad que emacs es autodocumentado, lo cuál lo hace muy potente y sin necesidad de depender de tutoriales o manuales externos, entre los que se incluye este mismo blog, aunque recordar que este blog tiene la finalidad de aprender desde 0 de forma rápida las tareas más habituales para alguien que se quiera iniciar en emacs y en español.


Mar 09 2009

Lisp en Emacs

Tag: basicoverdrive @ 4:45 am

Existen distintos dialectos de emacs, por lo que disponemos de distintos modos en lisp.

lisp

M-x emacs-lisp-mode : usado para editar emacs lisp/elisp (.emacs o .el)
M-x lisp-mode : usado para editar codigo common lisp (.l, .lsp o .lisp)
M-x lisp-interaction-mode : usado para editar y ejecutar elisp.

Existen otros dialectos, entre ellos scheme (que es minimalista) o CL (common lisp, que es análogo a scheme). También decir que existe alguna implementación curiosa llamada sbcl (steal bank common lisp) que es un lisp bastante peculiar, el cual se puede usar bajo slime en emacs, aunque esto sobrepasa el objetivo de este artículo. Cambiando de tercio, decir que muchos keystrokes estan asociados a S-expressiones (expresiones simbólicas) que se refiere a cualquier expresión simbolica correcta (número, símbolo, variable, lista, etc). En el caso de listas son S-expressiones especiales, y defun (definición de funciones) son casos especiales de listas.

He dividido el artículo en dos partes, refiriendome a common lisp y scheme en general, o bien a casos particulares de emacs lisp

Common lisp y scheme general

S-exp

C-M-b : ‘backward-sexp‘; se desplaza a la S-exp anterior.
C-M-f : ‘forward-sexp‘; se desplaza a la siguiente S-exp.
C-M-t : ‘transpose-sexps‘; transpone 2 S-exps.
C-M-@ : ‘mark-sexp‘; pone la marca al final de la actual S-exp y el cursor al principio.
C-M-k : ‘kill-sexp‘; elimina la S-exp.
(sin keystroke asociada) : ‘backward-kill-sexp‘; elimina la anterior S-exp.

Listas

C-M-n : ‘forward-list‘; siguiente lista.
C-M-p : ‘backward-list‘; anterior lista.
C-M-d : ‘down-list‘; se desplaza hacia delante un nivel hacia abajo de los paréntesis.
(sin keystroke asociada) : ‘up-list‘; se desplaza hacia delante un nivel de los paréntesis.
C-M-u : ‘backward-up-list‘; se desplaza hacia atrás un nivel de los paréntesis.

Funciones

C-M-a : ‘beginning-of-defun‘; inicio de la definición de función.
C-M-e : ‘end-of-defun‘; fin de la definición de función.
C-M-h : ‘mark-defun‘; marca una definición de función.

Los keystrokes básicos empleados en lisp son;

Para indentación:

TAB : para indentar
C-j : introduce el salto de línea y adicionalmente TAB para indentar la siguiente.
C-M-q : indenta el bloque más interno de la expresión actual, es decir, de la s-expresión.

Para comentarios:

M-; : Añade un comentario al final de linea, siempre después de cualquier instrucción de código. Si se realiza en un comentario, se desplaza al inicio del mismo, justo detrás del último carácter delimitador de comentario que es ‘;‘ o ‘;;‘. Si se realiza en una línea en blanco, añade ‘;;‘.
M-j : Si se realiza en medio de un comentario, divide el comentario actual en varias líneas con el forma correcto. No se debe usar en la parte de código, ya que no tiene un formato correcto.
(sin keystroke asociada) : ‘kill-comment‘; elimina un comentario.

Emacs lisp específico

C-M-x : ‘eval-defun‘; evalúa la definición de función.
M-TAB : ‘complete-lisp-symbol‘; completa el símbolo según los símbolos ya conocidos.
C-j : ‘newline-and-indent‘; crea un salto de línea (dividiendo la línea) e indenta la nueva línea respecto la anterior.

Modo mayor y menor lisp

Es posible trabajar con el lisp-mode como un modo mayor en vez de menor, para ello tenemos el siguiente juego de keystrokes:

C-c C-z : ‘switch-to-lisp‘; cambia el modo lisp para que se ejecute como un modo menor en lugar de mayor.
C-M-x : ‘lisp-eval-defun‘; evalúa la definición de función en modo menor.

Otra forma de evaluar s-expressiones

M-: : ‘eval-expression‘; evalúa una expresión dada al instante via modeline.
C-x C-e : ‘lisp-eval-last-sexp‘; evalúa la última s-expresión en lisp.

Antes de finalizar, decir que se puede acceder a la ayuda de funciones mediante C-h f que invoca ‘describe-function‘ y ahi buscar una función que nos interese, que además es posible acceder al código y ver como esta implementado mirando el fichero donde este implementado (ya que existe un enlace a la función del fichero fuente en el que se encuentre). Esto se puede reconocer porque suele ir precedido de function-name is an interactive compiled Lisp function in ‘file.el’.

lisplogo

Existen otros modos y entornos dentro de emacs más interesantes y potentes como slime, pero ello conllevará un artículo entero.