Kapitel 11. sgml-mode und Emacs

Neuere Emacs- und XEmacs-Versionen verfügen über ein nützliches Lisp-Paket namens PSGML. PSGML (das über den Port editors/psgml installiert werden kann) ist ein so genannter Majormode, der Funktionen speziell für den Umgang mit SGML-Dateien, -Elementen und deren Attributen bereit stellt. Emacs aktiviert PSGML automatisch, wenn eine Datei mit der Endung .xml geladen oder der Befehl M-X sgml-mode eingegeben wird.

Die Arbeit an SGML-Dokumenten wie dem FreeBSD-Handbuch kann sich wesentlich einfacher gestalten, wenn einige der Funktionen von PSGML gekannt sind:

C-c C-e

Ruft die Funktion sgml-insert-element auf, die nach dem Namen des einzufügenden Elements fragt. Ist dieser eingegeben worden und wurde die Eingabetaste gedrückt, fügt die Funktion Start- und Endtag des neuen Elements ein. Sofern das eingefügte Element laut DTD andere Elemente enthalten muß, werden diese ebenfalls eingefügt.

Falls Sie unsicher sind, wie der Name des gewünschten Elements lautet oder welche Elemente an der aktuellen Position erlaubt sind, können mittels der Taste Tab alle an dieser Stelle möglichen Elemente angezeigt werden. Ebenso ermöglicht Tab die Vervollständigung eines bereits eingegebenen Elementnamens.

C-c =

Ruft die Funktion sgml-change-element-name auf, mit der das aktuelle Element – das Element zwischen dessen Start- und Endtag sich der Cursor befindet – ausgewechselt werden kann. Die Funktion fragt nach dem Namen des neuen Elements und ersetzt anschließend Start- und Endtag des alten Elements durch die des neuen Elements.

C-c C-r

Ruft die Funktion sgml-tag-region auf, die einen markierten Textabschnitt mit einem Element umschließt. Dazu markieren Sie zuerst den Textabschnitt (gehen Sie zum Anfang des Abschnitts und führen Sie C-space aus, dann gehen Sie zum Ende des Abschnitts und führen erneut C-space aus), danach führen Sie diese Funktion aus. Sie werden nach dem Namen des einzufügenden Elements gefragt. Dessen Start-Tag wird dann am Anfang des markierten Textes eingefügt, dessen End-Tag am Ende des markierten Texts.

C-c -

Ruft die Funktion sgml-untag-element auf, die Start- und Endtag des Elements entfernt, innerhalb dessen sich der Cursor befindet.

C-c C-q

Ruft die Funktion sgml-fill-element auf. Diese Funktion formatiert[17] den Inhalt des aktuellen Elements neu. Dieser Vorgang betrifft auch Elemente wie programlisting, in denen Leerzeichen und ähnliches Teil der Formatierung sind. Aus diesem Grund ist mit sgml-fill-element bedächtig umzugehen.

C-c C-a

Ruft die Funktion sgml-edit-attributes auf. Diese öffnet einen zweiten Puffer mit allen Attributen des Elements, innerhalb dessen sich der Cursor befindet. Über Tab kann von einem Attribut zum nächsten gewechselt werden. Ein existierender Attributwert kann mit C-k gelöscht werden. Die Tastenfolge C-c C-c schließt den Puffer und setzt die Attribute des Elements entsprechend den Puffervorgaben.

C-c C-v

Ruft die Funktion sgml-validate auf, die zuerst fragt, ob das aktuelle Dokument gespeichert werden soll und anschließend einen SGML-Validator aufruft. Die Ausgaben des Validators werden in einem neuen Puffer angezeigt. Dadurch hat der Benutzer die Möglichkeit, eventuell vom Validator gefundene Fehler zu korrigieren.

C-c /

Startet die Funktion sgml-insert-end-tag, die automatisch das passende End-Tag für das gerade offene Element einfügt.

Zweifellos hat PSGML noch weitere nützliche Funktionen, doch die hier genannten sind die, die der Autor dieser Fibel am meisten benutzt.

Um den richtigen Einzug, die Umwandlung von Tabulatoren in Leerzeichen und die maximale Zeilenlänge für Dokumente des FDPs sicherzustellen, kann folgender Eintrag in .emacs vorgenommen werden:

    (defun local-sgml-mode-hook
      (setq fill-column 70
            indent-tabs-mode nil
            next-line-add-newlines nil
            standard-indent 4
            sgml-indent-data t)
      (auto-fill-mode t)
      (setq sgml-catalog-files '("/usr/local/share/xml/catalog")))
    (add-hook 'psgml-mode-hook
      '(lambda () (local-psgml-mode-hook)))


[17] Formatieren bedeutet in diesem Zusammenhang, dass die Funktion versucht, soviel Zeichen wie möglich in einer Zeile unterzubringen. Die Stelle, bis zu der gefüllt und dann der Zeilemumbruch erfolgt, ist konfigurierbar.

Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an <de-bsd-questions@de.FreeBSD.org>.

Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an <de-bsd-translators@de.FreeBSD.org>.