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.
Necesitará verificar su sistema y asegurarse de que cuenta con todas las herramientas descritas abajo instaladas y funcionando.
Alguna clase de sistema operativo UNIX o tipo-UNIX. Lo siento, este artículo no es para usuarios de Windoze. No estoy discriminando injustamente, es sólo que no tengo ni idea de cómo funcionan las herramientas en este ambiente y tampoco tengo intenciones de averiguarlo. Yo por ejemplo, uso el Sistema Debian con el Núcleo Linux. [1].
Se necesitará alguna versión de GNU Emacs. Probablemente todo esto también funcione con XEmacs pero francamente no sé cuáles son las diferencias entre ambos paquetes. De todos modos, si usted es un usuario de XEmacs probablemente sepa qué hacer para conseguir que todo esto camine. Yo uso Emacs 21 el cual viene con unos coquetos menús y una barra de herramientas en X. Esta última versión probablemente sea la más adecuada para los principiantes.
PSGML: (Tomado de la documentación de PSGML) "Es un modo principal para editar documentos SGML y XML. Funciona con GNU Emacs 19.34, 20.3, o mayores o con XEmacs 19.9. PSGML contiene un simple analizador sintáctico SGML y puede trabajar con cualquier DTD. Entre las funciones que provee se destacan menús y comandos para insertar las etiquetas que sean contextualmente válidas, identificación de errores estructurales, edición de los valores de los atributos en una ventana aparte con información sobre tipos estándar y una edición estructurada. "
La discusión sobre este paquete y por qué Emacs puede ser tan poderoso en la edición estructurada como SGML o HTML será el principal objetivo de este artículo. De hecho, el modo HTML de Emacs es muy poderoso y hace que la creación y edición de páginas web sea una pasada. Doy ánimos a los usuarios a que, después de leer este artículo prueben este modo principal de Emacs. Algunas personas son perezosas y prefieren los editores HTML de tipo visual. Si bien son muy fáciles de usar, no son prácticos a la hora de crear páginas web dinámicas. El código que generan casi siempre es muy sucio (en particular el código generado por MS-FrontPage es horrible) o lleno de datos inútiles. Esto hace que se haga difícil el cortar y pegar piezas aquí y allá para crear páginas dinámicas usando, por ejemplo Perl/CGI o PHP. Además, si nos consideramos a nosotros mismos programadores y admitimos la necesidad de una de estas herramientas visuales, probablemente nos encontremos en el sitio equivocado y deberíamos considerar cambiar nuestra carrera al diseño gráfico.
SGML-Base y SGML-Data: Así es como son llamados en Debian. Se deberá contar con la instalación equivalente en la distribución usada. De cualquier modo, esto debería instalar el archivo de catálogo de SGML base y los DTDs básicos (se explicará todo esto más adelante). Estoy casi seguro de que esto es lo que deja que nuestros documentos usen los identificadores públicos en lugar de los identificadores del sistema.
En cualquier documento SGML, la primera línea debe ser una declaración SGML o una declaración DOCTYPE de la forma:
<!DOCTYPE article PUBLIC "-//OASIS//DTD Docbook V3.1//EN" >
Esta línea le dirá al analizador sintáctico frente a qué tipo de documento se encuentra y contra qué DTD debe validar. En el ejemplo de arriba, el documento es un "artículo" definido en el DTD Docbook. Si todo está instalado correctamente, el sistema debería ser capaz de encontrar el DTD sin que le tengamos que especificar caminos a los archivos. Si el encabezado de arriba no llegara a funcionar, todavía tendremos la posibilidad de agregar lo que se llama un "identificador de sistema" para que así el analizador sintáctico pueda encontrar el DTD. Los analizadores sintácticos toman la siguiente forma:
<!DOCTYPE book PUBLIC "-//OASIS//DTD Docbook V4.1//EN" "/usr/lib/sgml/dtd/docbook-3.1/docbook.dtd">
Estoy bastante seguro de que los archivos de catalogos SGML que se piden como requisitos es lo que deja al usuario usar solamente identificadores públicos, lo que hace que los documentos sean mucho más portables. Si algún lector puede contribuir con algún comentario adicional en esta parte, agradecería la retroalimentación.
SGML-Tools, SGML-Tools Lite, Docbook-Tools, Debian-Doc o Linux Doc Tools. Esto depende de la distribución Linux usada y las tareas que se quieran realizar. Estos paquetes se denominan de forma diferente en cada distro pero realizan las mismas tareas. Se encargan de instalar guiones que facilitan la conversión de SGML a cualquiera de los formatos HTML, PS, PDF, RTF, TeX, etc. Estos guiones probablemente causen dependencias a otros paquetes como Jade y TeX. También necesitaremos instalar el DTD de Docbook, las hojas de estilo DSSSL de Docbook, XML y XSL (si eventualmente queremos trabajar con XML-Docbook) y el paquete Docbook-Utilities. Después de que hayamos instalado todas estas utilidades seremos capaces de ejecutar órdenes como db2ps, db2html, db2rtf y demás.
He aquí algunas de las dependencias que puedo deducir de la información provista por los paquetes en Debian:
La conversión a texto requiere groff-base
La conversión a LaTeX requiere tetex-base, tetex-bin y tetex-extra.
La conversión a Info requiere Jade.
La conversión a PostScript requiere TeX, DVI, GhostScript y otras herramientas PS. A su vez, si queremos ver los archivos .ps deberemos tener instalado GhostView u otro programa equivalente.
La lista de arriba debe tomarse como algo representativo y variará según el sistema (si hablamos de Linux dependerá en la distribución y versión). De todos modos, dado que SGML y Docbook son herramientas bastante estándar en los sistemas operativos libres, es muy común que su sistema tenga un macro paquete que instale todo lo que necesitemos con relativa facilidad.
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...
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.
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....
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.
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.
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
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.
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)
[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. |