4. SGML usando Emacs

La palabra Emacs podría ahuyentar a mucha gente que lea este artículo. Yo los entiendo. No puedo entender por qué diablos un editor tiene que ser tan complicado y obscuro. Es por esto que nunca me esforcé mucho por aprender a usarlo. Soy tan sólo un hombre simple y haragán y amo a los editores simples y poderosos como Nedit, del cual pienso todavía que es un gran editor. Sin embargo, y créanme, cuando descubran la edición SGML utilizando Emacs (lo cual, con suerte aprenderán aquí), realmente se sorprenderán. De hecho, estoy seguro de que quedarán tan impresionados que nunca más querrán abandonar Emacs para ninguna de sus necesidades de edición. Están leyendo estas palabras de alguien que solía evitar Emacs a toda costa y ahora lo usa para todas las cosas que se puedan imaginar.

Aprender Emacs es un viaje largo, pero no tiene por qué ser aburrido. Se debe entender que este programa no es tanto un editor de textos, sino todo un ambiente. Luego, si se lo lleva poco a poco, terminaremos por acostumbrarnos a él y, eventualmente amarlo.

Antes de empezar con la parte práctica de esta guía se necesitará instalar todas las siguientes cosas para interpretar los ejemplos.

4.1. Requisitos del Sistema

Necesitará verificar su sistema y asegurarse de que cuenta con todas las herramientas descritas abajo instaladas y funcionando.

4.2. Hola Mundo

A este punto el lector debería ser capaz de iniciar Emacs invocando emacs en el intérprete de órdenes o seleccionando la opción en nuestro escritorio. Notar que Emacs tendrá el mismo comportamiento tanto en X Window como en la consola de caracteres. Creo que la única diferencia es que en el modo de caracteres los menús deben ser activados con el teclado, en lugar de utilizar el ratón. En realidad no puedo explicar mucho sobre este punto ya que nunca he usado Emacs en modo de consola puro.

Una vez que Emacs se haya ejecutado nos encontraremos en el búfer *scratch*.[2] Podremos crear un nuevo archivo usando los comandos C-xC-x C-f

Emacs preguntará por el archivo en la parte inferior de la pantalla, la cual se llama mini-búfer. Si se escribe el nombre de un archivo que no existe en el directorio actual (casi siempre ~/), Emacs creará un nuevo archivo. Para empezar, escríbase hello.sgml y presiónese enter.

Si se ha instalado correctamente PSGML se debería ver Loading psgml...done en el mini-búfer. También, en la barra de estado (la línea que está justo arriba del mini-búfer), se debería ver SGML indicando que se ha activado el modo principal SGML.

He aquí el archivo completo para un documento tipo "Hola mundo":

Ejemplo 1. Ejemplo de código para Hola Mundo

<!DOCTYPE book PUBLIC "-//OASIS//DTD Docbook V3.1//EN" []>
<book>
  <title>Mi primer libro</title>
  <chapter>
    <title>Mi primer capítulo</title>
    <sect1>
      <title>Mi primer sección</title>
      <para>
        Mi primer párrafo
     </para>
    </sect1>
  </chapter>
</book>

Se podría escribir este listado carácter a carácter en cualquier otro editor (excepto quizá con LyX), o se puede sacar provecho de las ventajas que tiene el modo principal PSGML de Emacs para la edición estructurada. Aquí es donde comienza la parte interesante...

4.3. Primer Paso: La declaración del Documento

La primera cosa que siempre se deberá hacer al editar un documento Docbook es escribir la Declaración del Tipo de Documento, y esto debe ser realizado manualmente.

<!DOCTYPE book PUBLIC "-//OASIS//DTD Docbook V3.1//EN" []>

Esta primera línea en el documento le dirá a Emacs dónde encontrar la DTD para que pueda analizarlo sintácticamente cuando sea necesario. La DTD contiene todas las reglas para Docbook y permitirá a PSGML deducir qué cosas están permitidas, en qué lugares y cómo realizar el sangrado del documento.

4.4. Empezar a usar PSGML

Ahora que se tiene la línea DOCTYPE, muévase el cursor justo debajo y presiónese C-c C-e. Si nos tardamos lo suficiente en el mini-búfer se podrá apreciar que Emacs ha elegido book como el elemento válido. Esto es así porque en ese punto del documento no hay otro elemento válido que podamos ingresar. Ahora, presiónese enter y veamos que ocurre. Si todo funciona bien, obtendremos el siguiente código:

<!DOCTYPE book PUBLIC "-//OASIS//DTD Docbook V3.1//EN" []>
<book>
</book>
      

Ahora presiónese enter una vez más y luego C-c C-e. Obsérvese ahora que Emacs no es capaz de decidir qué etiqueta usar en este punto dado que existe más de una opción. Igual que en una shell se podrá presionar Tab para autocompletar pero, dado que existen muchas opciones se verá que la pantalla se divide mostrándonos una lista de las etiquetas válidas en ese punto del documento.

Si se desea salir de dicha selección, simplemente presiónese C-g o escríbase las primeras letras de la etiqueta (por ejemplo, escríbase "ti"), y luego Tab y luego Enter. Lo que hemos hecho es crear una etiqueta para insertar el título del documento y Emacs ya ha ubicado el cursor justo donde los necesitamos! Escríbase el título y muévase el cursor al final de la línea (como en cualquier editor, se podrá presionar End con tal motivo), presiónese Enter y luego C-c C-e. Escríbase ahora "ch" y luego presiónese Tab. ¡Acabamos de crear nuestro primer capítulo!. Sígase igual, hasta haber editado un documento parecido a hola-mundo.sgml listado en Ejemplo 1>.

Hasta el momento, se podrá empezar a apreciar lo que se quiso decir con un editor de textos estructurado. Y esto es sólo el comienzo, ya que la funcionalidad de PSGML se conecta con muchas características interesantes de Emacs, lo que realmente confirma que ambas cosas son las herramientas definitivas para el desarrollo de documentos SGML. Por supuesto, puede pasar que a este punto a uno todavía no le agrade tanto Emacs porque, a pesar de las ventajas vistas, todavía sigue siendo muy raro y obtuso. Así que, hagamos algunas mejoras....

4.5. Gran introducción, pero Emacs sigue sin gustarme demasiado...

Bueno, probablemente para muchos usuarios como yo, que venimos de editores de texto amigables y coquetos, Emacs sea insípido y complicado por lo que en esta sección se mostrará cómo hacer que funcione como un editor de textos normal. Se podrá ver que con un pequeño retoque Emacs puede ser tan o más amigable que el editor de textos que solíamos usar.

4.5.1. Colores de las Fuentes

La principal cosa que perdí al migrar a Emacs fue el Coloreado Sintáctico[3] y me costó mucho trabajo enterarme de cómo activarlo. En Emacs, la opción para esto se llama Global Font Lock. El porqué de tal nombre es un misterio para mí, pero he aquí lo que hay que hacer para activarla:

M-x global-font-lock

Obviamente, no se deberá escribir todo esto. Simplemente global-f y Tab.

4.5.2. ¡Quiero ver lo que estoy seleccionando!

Otra característica estándar molesta de Emacs es la imposibilidad de ver lo que se está seleccionando. Emacs trae el modo mark desactivado por defecto, así que lo deberemos activar con:

M-x transient-mark-mode

4.5.3. ¡Dios mío! ¿Cómo hago para desactivar el estúpido ajuste de línea?

En lo personal, ésta fue la cosa más molesta de Emacs. Es decir, hay muchas situaciones en las que, le guste o no al estándar de codificación GNU, hay que ir más allá del margen derecho. Bueno, ellos han hecho bastante difícil el desactivar esta opción estúpida, pero he aquí lo que hay que hacer:

M-x hscroll-mode

Sin embargo, esto no termina aquí, y lo siguiente no será tan trivial. Se deberá cambiar al búfer *scratch* (lo cual se podrá hacer seleccionando el menú Buffers y luego click en *scratch*). Éste es un búfer de evaluación de expresiones Lisp (lo que quiere decir que simplemente, el modo principal por defecto de este búfer es para evaluaciones Lisp, lo cual se puede ver en la línea de estado). Ahora, escríbase la línea

(setq-default truncate-lines 1)

seguida de C-j. Esto ejecutará la línea de código Lisp.

4.5.4. Guardando nuestras personalizaciones.

Lo que se debe hacer es crear un archivo llamado .emacs en nuestro directorio home. Éste será ejecutado cada vez que Emacs se inicie. He aquí cómo luce mi archivo .emacs:

(global-font-lock-mode)
(transient-mark-mode 1)
(hscroll-mode)
(setq-default truncate-lines 1)	

Notas

[1]

La sutil precisión de la oración tiene como propósito impedir en este documento la confrontación Linux vs. GNU/Linux.

[2]

El lector debe notar que este artículo no es una guía paso-a-paso sobre el uso de Emacs. Hay mucha información escrita sobre esto. Este artículo se enfocará en el uso del modo principal PSGML y el DTD Docbook. De todos modos se hará una reseña paso-a-paso sobre el conocimiento mínimo necesario para que un principiante pueda manejarse en este documento. El resto debería ser investigado por el lector.

[3]

que es la traducción al español de "Syntax Highlighting". Nota del traductor.