Aprendiendo GNU Emacs y org-mode (IX) – La ayuda de Emacs.

Lo cierto es que hoy en día parece imposible vivir este mundo de la informática sin acceso a la Web.

Estamos tan acostumbrados a youtubers, influencers y otros palabros que no me volveréis a oír nombrar ;), que olvidamos lo esencial.

Hace unos días recordaba mis inicios cómo programador, a finales de los 70, primeros de los 80 -uffff …. que pereza-.   Siempre recuerdo con pasmo cuando en una semana de pruebas para acceder a una nueva empresa, en la que debía programar en un equipo IBM S/1, que no conocía de nada, me soltaron en una mesa con un tocho de manuales, cómo el que veis en la imagen, y apáñatelas, desde esa memoria ha nacido esta entrada.

Os cuento …

Para curiosos, esto era la S/1 de IBM.

Todo esto me hizo pensar que si Emacs es “autodocumentado”, no debiera ser muy difícil acceder a sus diferentes ayudas sin salir de él, ya que voy aprendiendo que la forma más eficiente de andar por mi equipo es no salir del terminal y  Emacs, a pesar de que la costumbre de años me tira hacia el entorno gráfico.

Así que me puse a estudiarlo un poco, y aquí esta esta entrada, para mi memoria y por si a alguien le puede servir.

El sistema de Ayuda de Emacs.

Emacs proporciona una gran cantidad de comandos de ayuda. Cada aspectos del mismo  esta definido y descrito, por lo que aprender a localizar y moverse en medio de toda esa documentación me parece fundamental para dominar a la bestia.

A toda  esta información se accede de forma general desde el prefijo:

C-h o F1

A partir de ahí tendremos en el mini buffer la opción que nos mostrará todas las opciones, exactamente igual que la combinación:

C-h C-h

En teoría podemos desplazarnos por la lista con

 <SPC> y <DEL>

Esta opción a mi no me funcionaba 🙁 pero gracias a los comentarios se me ha aclarado que  SPACE y DEL, funcionan cómo avance y retroceso de página.  Eso sí, no sé si hay un mal entendido por mi parte, o por mi teclado, ya que yo entendía la tecla DEL cómo la Supr cuando en realidad hace referencia a BACKSPACE.  (Ver el manual, punto 10.5).

Podemos salir de la lista con la opción:

C-q

Aparte de esto no despreciar, especialmente si estas en tu primera aproximación a Emacs la muy útil e informativa pantalla de inicio, con sus útiles opciones:

Para cualquiera que se aproxima a Emacs recomiendo comenzar con el Emacs Tutorial para ver los comandos básicos para moverse con él y Emacs Guided Tour para hacerse una idea de las capacidades de Emacs.

A partir de ahí con lo que os explico a continuación, la información de mi página de recursos sobre Emacs y sobre todo sin dejar de seguir Planet Emacsen y Planet Emacses seguro que iremos aprendiendo una barbaridad y ajustando nuestro Emacs a nuestrasw necesidades y gustos.

Aclarando un poco.

A partir de lo anterior, todo es usarlo y aprovechar toda la información que el sistema de ayuda pone en nuestra mano, lo que es fundamental para  para refrescar la memoria, o para buscar respuestas, por lo que me parece que saber moverse en medio de ese maremágnum  es fundamental por varios motivos:

  • Aprendes más y mejor
  • Se disfruta más sus uso y se aprende a personalizarlo
  • Conocerás mejor y podrás analizar con más conocimiento de causa los paquetes que usas
  • Aprendes a resolver problemas de forma autónoma, y te pone en condiciones de ayudar a otros
  • Te da confianza, ya que no saber cómo hacer algo en Emacs es normal, pero si sabes encontrar las soluciones no hay problema

Pero vamos a lo importante, si se busca una determinada función, pero no sabemos  cómo se llama ni dónde buscarla, hay que tener claro que

El sistema de ayuda de Emacs está dividido en tres partes y saber cuál es la necesaria en cada momento es el primer paso

Los tres puntos fundamentales son:

  • el comando apropos
  • el índice del manual
  • el sistema de autodescricipción

Obteniendo ayuda.

Apropos.

Emacs tiene un extenso sistema que funciona de manera similar al apropos de la línea de comando. Este sistema es especialmente útil si no está completamente seguro de lo que se está buscando y se invoca mediante la combinación:

C-h a <argumento>

Esto busca comandos cuyos nombres coincidan con los temas del argumento. El argumento puede ser una palabra clave, una lista de palabras clave o una expresión regular (ver Regexps y Apropos)

Apropos sirve para centrar las búsquedas a un área en particular, algo habitualmente fundamental en la búsqueda  ya sea de  variables o comandos, mediante los comandos:

M-x apropos-variable   - Muestra las variables asociadas al patrónM-x apropos-command    - Muestra los comandos que coinciden con un patrón
M-x apropos            - Une las dos anteriores

A modo de ejemplo os dejo las salidas asociadas a la expresión wrap* con los tres comandos:

M-x apropos-variable:

isearchd-wrap-function
 Variable: Function to call to wrap the search when search is failed.
word-wrap
 User option: Non-nil means to use word-wrapping for continuation
 lines.
wrap-prefix
 Variable: Prefix prepended to all continuation lines at display
 time.

M-x apropos-command:

gnus-article-outlook-unwrap-lines M-x ... RET
 Unwrap lines that appear to be wrapped citation lines.
toggle-word-wrap M-x ... RET
 Toggle whether to use word-wrapping for continuation lines.

M-x apropos:

cl--block-wrapper
 Function: Return the argument unchanged.
completion--capf-wrapper
 Function: (not documented)
gnus-article-outlook-unwrap-lines
 Command: Unwrap lines that appear to be wrapped citation lines.
 Properties: event-symbol-element-mask event-symbol-elements
 modifier-cache
isearch--state-wrapped
 Function: (not documented)
 Properties: compiler-macro side-effect-free
isearch--state-wrapped--cmacro
 Function: (not documented)
isearch-lazy-highlight-wrapped
 Variable: (not documented)
isearch-wrap-function
 Variable: Function to call to wrap the search when search is failed.
 Properties: variable-documentation
isearch-wrapped
 Variable: (not documented)
line-wrapping
 Properties: event-symbol-element-mask event-symbol-elements
 modifier-cache
menu-bar-line-wrapping-menu
 Variable: (not documented)
minibuffer-history-isearch-wrap
 Function: Wrap the minibuffer history search when search fails.
run-hook-wrapped
 Function: Run HOOK, passing each function through WRAP-FUNCTION.
toggle-word-wrap
 Command: Toggle whether to use word-wrapping for continuation lines.
 Properties: event-symbol-element-mask event-symbol-elements
 modifier-cache
window-wrap
 Properties: event-symbol-element-mask event-symbol-elements
 modifier-cache
with-wrapper-hook
 Macro: Run BODY, using wrapper functions from HOOK with additional
 ARGS.
 Properties: lisp-indent-function edebug-form-spec byte-obsolete-info
word-wrap
 User option: Non-nil means to use word-wrapping for continuation
 lines.
 Properties: safe-local-variable event-symbol-element-mask
 event-symbol-elements modifier-cache standard-value
 variable-documentation
wrap-prefix
 Variable: Prefix prepended to all continuation lines at display
 time.
 Properties: variable-documentation

El manual.

Obviamente el manual es la primera fuente de información, incluso para, Stallmanianos irreductibles, lo puedes comprar impreso y firmado por el susodicho ;). En cualquier caso par mí es la mejor fuente de información.

Ciertamente está disponible en la Web, así que, ¿para que usarlo en Emacs?. Pues por ejemplo para poder tenerlo en un marco asociado al trabajo que estamos haciendo, o para utilizar su excelente sistema de marcadores, del que espero hablar más otro día.

A la hora de optar por esta opción debemos tener en cuenta:

  • Los manuales de Emacs están escritos en TeXinfo, que es el formato oficial de toda la documentación del Proyecto GNU y que la verdad es que son un poco toscos comparados con los  man  pages de toda la vida.  De hecho si alguna vez habéis  utilizado la información de la herramienta de línea de comandos, habrá interactuado con el visor de hipertexto de TeXinfo.  Emacs, obviamente, incluye su propio visor de información.
  • El manual de Emacs contiene no solo temas relacionados con Emacs, sino que por defecto el navegador de información indexará todos los demás manuales de información instalados en tu sistema, como los manuales GNU coreutils.

A mucha gente no le gusta este sistema, pero la verdad es que después de haberlo usado un poco, no veo por qué, ya que funciona  de manera muy similar a un navegador, aunque las combinaciones de teclas son diferentes.

Para acceder al lector de Emacs, podemos usar estas opciones:

M-x info
C-h i

A partir de ahí aparecerá, el navegador de documentación, pudiendo movernos por el con el ratón 🙁 haciendo clic en los hipervínculos o usar estos atajos de teclado para navegar:

[ y ]   - nodo anterior / siguiente
l y r - retrocede / avanza en la historia
n y p - Nodo hermano anterior / siguiente
u     - Sube un nivel a un nodo padre
SPC   - Desplazarse una pantalla a la vez
TAB   - circúla por las referencias cruzadas y enlaces
RET   - Abre el enlace activo
m     - Solicita un nombre de elemento de menú y lo abre
q     - Cierra el navegador de información

Hay que tener en cuenta que esta información están organizados de forma jerárquica, por lo que  para la lectura secuencial, lo más útil es <SPC> que lee, página a página conviene usar [ y ] para navegar si está revisando un manual de información de principio a fin. Eso es los mismo que leer un libro que comienza en un capítulo, y moverse a través de todos los subcapítulos, en el orden en que están. Si, en cambio, desea saltar al nodo siguiente o anterior del mimo nivel, usar n y p y  para ir hacia atrás o hacia adelante en la historia (al igual que un navegador) l y r.  Por último la tecla u sube al nivel padre,  <TAB> pasa por los hipervínculos y <RET> los abre.

El sistema de autodescripción.

En cualquier caso lo más llamativo, al menos para mí del sistema de autodescripción de Emacs es el sistema de descripción de comandos.

Si sabes lo que estás buscando, cada aspecto de Emacs, ya sea escrita en eLisp o en en el  núcleo, es accesible y está indexado por medio de este sistema .

Desde las teclas hasta los comandos, los juegos de caracteres, los sistemas de codificación, las fuentes, los modos, las tablas de sintaxis y mucho más: todo está ahí, claramente categorizado.

Si alguna vez te encuentras preguntándote qué es lo que hace algo en Emacs (ya sea una función, un comando, una variable o un modo), entonces este sistema te lo describirá.

Para mí el mayor inconveniente es que asume una audiencia técnica y aunque no hay que ser  un experto para entenderlo llevará un poco de tiempo familiarizarse con la terminología utilizada.

Para usar este sistema sólo hay que memorizar cuatro teclas

Debe memorizar cuatro teclas de descripción, ya que son las más importantes para el uso cotidiano de Emacs:

M-x describe-mode o C-h m

Muestra la documentación para el modo principal y los modos menores habilitados junto con las combinaciones de teclas introducidas por dichos modos, es decir la información más útil en el buffer actual.  Para mi esta siendo mi primera fuente de información y me ayuda a descubrir muchas funcionalidades de Emacs.

M-x describe-funcion o C-h f

Otro comando importante para dominar Emacs.  La descripción de la función presenta  un hipervínculo al lugar donde está declarada y una cadena de documentación.

Si la función es un comando, dirá que es interactivo.

M-x describe-variable o C-h v

Al igual que describe-función, este comando también es importante.  Modificar  variables no siempre es fácil para un principiante, sin embargo, ser capaz de leer lo que hace una variable es de gran ayuda para ir aprendiendo, más para torpes cómo yo.

M-x describe-key o C-h k

Describe el comando Emacs  de una combinación de teclas, el ratón o una opción de menú.  Cuando no estéis seguros de lo que una combinación de teclas hace simplemente ingrese teclear esta combinación, seguida de la que queréis comprobar y Emacs os dará la respuesta.

Hay que recordar que algunas combinaciones dependen de los modos activos  y no son globales, por lo que podemos obtener una respuesta diferente según el búfer en el que estemos.

Buenos pues esto es todo por hoy, espero que a alguno os sirva de ayuda, y sino ya sabéis, buscadlo en Emacs ;).

 !Saludos a todos¡ y sobre todo !Gracias por estar ahí¡

8 comentarios en “Aprendiendo GNU Emacs y org-mode (IX) – La ayuda de Emacs.

  1. Yo de momento siempre acabo volviendo al manual en pdf pero me voy acostumbrando poco a poco a usar la ayuda dentro de emacs. Mientras más la voy usando más me gusta.

    Lo que me ha encantado es lo de los marcadores, me parece un sistema muy cómodo y gano mucho tiempo usándolos. Simplemente con C-x r m (guardar marcador) y C-x r b (saltar a marcador).

  2. Gran entrada. Buena referencia para encontrar “ayuda” sin salir de emacs.

    Por cieto, a mi SPACE y DEL me funcionan sin problema. Space es un “scroll” hacia abajo; DEL un “scroll” hacia arriba.

    • Gracias por el comentario.
      En cuanto a lo que dices de SPACE y DEL, edito la entrada, he visto que hay un mal entendido por mi parte, o por mi teclado, ya que yo entendía la tecla DEL cómo la Supr cuando en realidad hace referencia a BACKSPACE
      Un saludo.

  3. wow, que pedaso de post has redactado, claro, ameno y basto, cuando cresca ya me gustaria hacer cosas asi! Nunca me toco el periodo de gnu manticore (cuando se propusieron traducir el manual al español, ni un monton de otras cosas que se han perdido como lagrimas en la lluvia, pero este preciso momento con redit y los planets persivo a las emacsers muy vivos

    … pues C-h C-h (y C-h ?) + ESP y DEL me sirven para avanzar y retroceder tanto en modo grafico como en terminal y desde que uso el emacs, simpre lo han hecho, prueba sin cargar la configuracion, quiza algun modo se interponga. Otra cosa que podria pasar seria la version especifica incluida en la distribucion, no en pocas veces alguna cosa deja de funcionar o sale rana, actualmente en freidora el emacs por motivos raros me capta la composicion de tildes y se las come… y a veces en org con C-c ‘ no entra/sale del modo de edicion en los bloques de codigo. Para situaciones asi compilaba directamente del repo, pero hace varios meses que no lo puedo compilar….

    no me gusta info, presinamente por lo que “paginar” los encabezados. Habiendo probado el outline (con org) pues lo considero obsoleto e incomodo, tambien entiendo por que no se pasan a org (no esta hecho para eso).

    lo unico que me gustaria agregar es que emacs trae su propio paginador man con el nombre de woman y que en casos de necesidad con eww y los bangs de duck duck go se pueden evitar salir de emacs aun mas (!w y !wes)

    • Gracias por el elogio, y sí estoy contigo que, no sé si bastante, pero Emacs tiene vida … y creo que para rato.
      En cuanto a lo del teclado ya he actualizado el post y lo he puesto en otro comentario y lo del INFO es cómo todo, para gustos colores …
      Un saludo.

Deja un comentario