GNU Emacs como editor XML (o DocBook), con psgml
GNU Emacs puede ser un excelente editor (como no?) también para SGML, XML, o derivados tan populares com XHTML o DocBook. Esta receta concretamente introduce el uso del paquete psgml, aunque hay otros.
Introducción
A parte del consabido resalte de sintaxis y la inestimable indentación automática de bloques, Emacs ofrece otra gran ayuda para la edición de XML.
Emacs entiende el DTD asociado al XML en cuestión y te ofrece una lista de los elementos XML susceptibles de ser insertados en un punto concreto del documento. Con esto te aseguras que validará el DTD o Schema que uses. Además te ahorra escribir los elementos en si y los paréntesis angulares (<>) que siempre son un latazo.
Ingredientes
Como ya he dicho hay varios modos para edición de XML en Emacs tales como nXML-mode, pero yo recomiendo PSGML (al menos en esta receta :-)). Así que instala:
- psgml
- docbook-xml
Aunque el último sólo lo necesitas si vas a usar DocBook y además es probable que ya lo tengas como dependencia de GNOME.
Configurar Emacs
Para que el modo XML arranque automáticamente al iniciar Emacs y tengas un agradable coloreado de sintaxis es recomendable incluir estas pocas líneas en tu .emacs:
(defun psgml-ext ()
(setq sgml-set-face t) ; without this, all SGML text is in same color
(setq sgml-markup-faces
'((comment . font-lock-comment-face)
(start-tag . font-lock-keyword-face)
(end-tag . font-lock-keyword-face)
(doctype . font-lock-builtin-face)
(entity . font-lock-constant-face)))
)
(setq-default sgml-indent-data t)
(add-hook 'sgml-mode-hook 'psgml-ext)
; immediate syntax coloring
(setq sgml-auto-activate-dtd t)Aquí tienes muchas más definiciones útiles para el .emacs que sirve para afinar más aún el modo SGML.
Prólogo (declaración DOCTYPE)
Para muchos de los comandos que se incluyen a continuación es necesario que definas un prólogo en el documento. Por ejemplo, en el caso de XHTML puede ser algo como:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">y para DocBook
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" "http://www.docbook.org/xml/4.3/docbookx.dtd">Combinaciones útiles
Como cualquier modo de Emacs digno de ser usado, PSGML tiene más combinaciones de teclas que las que cualquier humano podría aprender en su vida :-). Así que sólo pondré las que considero más útiles. Para algunos es determinante dónde esté el cursor o dónde se haga click.
| Insertar elemento (y cierre) | C-c C-e (o Mayus-Click Derecho) |
| Insertar elemento (apertura) | C-c < |
| Cerrar el elemento actual | C-c / |
| Cambiar elemento | C-c = |
| ‘Etiquetar’ un bloque | C-c C-r |
| Ir al comienzo del elemento | M-C-a |
| Ir al final del elemento | M-C-e |