GNU Emacs como editor XML (o DocBook), con psgml

emacs

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 Smiling). 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 Smiling. 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

Referencias