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.
Requisitos del Sistema
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 "-
OASISDTD 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.1EN"
"/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.
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
|| Nótese que
C-x hace referencia a presionar la tecla
Ctrl y luego la tecla
x. La secuencia
M-x hace referencia a presionar la tecla
Alt y luego la
x. En Emacs, la tecla
Alt puede emularse presionando (y soltando) primero la tecla
Esc siguiendo la tecla que corresponde. De hecho, en algunos sistemas la tecla
Alt no funcionará y nos veremos obligados a usar la tecla
Esc. ||
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.
|| Para la gente nueva en Emacs, este trajeteo entre cuadros puede resultar un poco confuso. Aunque, Emacs automatiza la mayoría de estas conmutaciones, si en algún punto nos encontramos perdidos, para volver a empezar podemos hacer click en el mini-búfer y presionar
C-g algunas veces. Esta orden le dice a Emacs que aborte las órdenes previas. Si por alguna razón nuestra pantalla está dividida en más de un cuadro, podremos "maximizar" (para usar un término familiar) cualquiera de estos cuadros simplemente haciendo click en él y luego presionando
C-x 1. Además, podremos dividir la pantalla de muchas maneras diferentes. Pruébese esto presionando
C-x 2,
C-x 3, y demás combinaciones. Estando en X-Window es realmente una buena idea tener la pantalla separada en cuadros, ya que podremos seleccionar cada uno de ellos por separado con un simple click de ratón. ||
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.
|| Emacs trabaja en los modos principal y secundario. Sólo puede haber un único modo principal activado a la vez. El modo SGML en el modo principal en el cual estaremos trabajando nosotros. Los modos secundarios se caracterizan por realizar tareas específicas y se puede tener varios de ellos ejecutándose dentro de un modo primario. Por ejemplo, existen varios modos secundarios útiles como auto-fill-mode e ispell-mode, los cuales nos ayudarán mucho cuando trabajemos con archivos SGML. El modo secundario Ispell verificará nuestra ortografía en tiempo real, mientras que el modo secundario auto-fill nos ayudará a mantener nuestros párrafos justificados correctamente. ||
He aquí el archivo completo para un documento tipo "Hola mundo":
Ejemplo 1. Ejemplo de código para Hola Mundo
<!DOCTYPE book PUBLIC "-
OASISDTD 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...
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.1EN" []>
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.
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 "-
OASISDTD 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....
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.
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.
¡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
¡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.
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)
|| [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. ||