Open Source im professionellen Einsatz
Linux-Magazin 08/2007
© photocase.com, anmanie

© photocase.com, anmanie

Workshop: Major Modes für (X)Emacs

Groß in Mode

Die Anpassung an spezielle Dateiformate führt beim Editor-Urgestein Emacs über so genannten Major Modes in der Programmiersprache Elisp. Dieser Workshop demonstriert die Technik am Beispiel eines Mode zum Schreiben von Manuskripten für das Linux-Magazin.

650

Als kürzlich sage und schreibe die Version 22 des Editors GNU Emacs erschien, kursierten in den Internetforen der News-Seiten die altbekannten Witze mit langem grauen Bart: Es handle sich ja gar nicht um einen bloßen Editor, sondern um ein ganzes Betriebssystem und so fort. Ganz grundlos sind die Seitenhiebe nicht, bringt Emacs 22 doch als eines seiner Highlights einen eingebauten Chat-Client mit.

Die Erweiterbarkeit des Editors gehörte von Anfang an zu seinen Grundtugenden. In der ihm eigenen Programmiersprache Elisp, einer Lisp-Variante, lassen sich vom Syntax-Highlighting bis zum Mail- und Newsreader alle denkbaren Funktionen implementieren.

Dieser Artikel bereichert Ihren Emacs um die Fähigkeit, das auf [1] beschriebene Autorenformat des Linux-Magazins zu verstehen und dafür Syntax-Highlighting und andere Nettigkeiten zur Verfügung zu stellen. Solche Funktionen, die sich mit einem spezifischen Dateiformat beschäftigen, werden durch so genannte Major Modes bereitgestellt, von denen es schon zahlreiche fertige gibt: für diverse Programmier- (C, C++, Perl, Python, Java, Emacs Lisp ...) und Markup-Sprachen (HTML, XML, Latex ...), aber auch fürs Lesen und Schreiben von Mails oder News und vieles mehr.

Emacs mit oder ohne X

Beim Schreiben von Code in Emacs Lisp müssen Sie daran denken, dass es zwei Varianten des Emacs gibt, deren eingebauter Sprachumfang sich an einigen Stellen unterscheidet: den klassischen Emacs, auch GNU Emacs genannt [2], sowie den Xemacs [3]. Die Trennung hat historische Gründe, wer die Nutzer beider Varianten als Zielgruppe vor Augen hat, muss an einigen Stellen für Kompatibilität sorgen. Was die Ankunft einer weiteren Variante (Sxemacs, [4]) für die Zukunft bedeuten wird, bleibt abzuwarten. Der hier entstehende Code wurde unter Xemacs entwickelt und zum Schreiben dieses Artikels mit GNU Emacs verwendet, ist also kompatibel.

Interaktive Entwicklung

In den meisten Programmiersprachen läuft es so, dass der Entwickler mit einem Editor oder einer IDE das Programm schreibt, danach eventuell einen Compiler hinzuzieht und schließlich das Programm über Mausklick oder in einer Shell startet. Bei der Entwicklung mit Emacs Lisp funktioniert das grundlegend anders: Ist der Editor einmal gestartet, läuft der Interpreter bereits und die neuen Funktionen sind ihm nur noch bekannt zu machen. Das passiert, indem Sie den Cursor ans Ende eines Ausdrucks stellen und die Tastenkombination [Strg] +[X] und dann [Strg]+[E] drücken.

Als Einstieg soll ein ganz einfaches Hello-World-Beispiel dienen, dessen Code Sie im »*scratch*«-Buffer einfügen können, der für solche Arbeiten zur Verfügung steht:

(defun simple-hello-world ()
  "Write "hello world" to the echo area."
  (interactive)
  (message "Hello World"))

Platzieren Sie den Cursor wie in Abbildung 1 hinter die letzte schließende Klammer. Evaluieren Sie diesen Emacs-Lisp-Ausdruck, der die interaktive Funktion »simple-hello-world« erzeugt, durch die erwähnte Tastenkombination. Danach steht die Funktion im Editor zur Verfügung und Sie können sie dank des »(interactive)« mit »M-x simple-hello-world« ausführen. Die folgende Entwicklung des Linmag-Mode verläuft ebenfalls interaktiv.

Abbildung 1: Zum Ausführen von Hello World im »*scratch*«-Buffer stellen Sie den Cursor hinter die Funktion.

Die wohl wichtigste Funktion bei der Unterstützung eines Dateiformats ist die syntaktische Einfärbung von Schlüsselwörtern und anderen Sprachkonstrukten. Der Mechanismus dazu trägt im Emacs den Namen Font-Lock und wird über Variablen gesteuert, die für den jeweiligen Buffer lokal gelten. Dazu erzeugen Sie zunächst eine Liste jener Schlüsselwörter, die das Dateiformat definiert (Listing 1). Im Fall dieses Beispiels sind dies die beim Linux-Magazin verwendeten Markup-Tags, die mit einem @-Zeichen beginnen.

Listing 1: Variable
definieren

01 (defvar linmag-commands
02   '("@R:"  "@SW:" "@D:"
03     "@T:"  "@V:"  "@A:"
04     "@L:"  "@ZT:" "@LI:"
05     "@B:"  "@Bi:" "@#:"
06     "@IT:" "@IL:" "@IE:"
07     "@KT:" "@KL:" "@KE:"
08     "@TT:" "@TH:" "@TL:"
09     "@TE:")
10   "List of available markup commands for linmag-mode.")

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Emacs-Modus Org-Mode 7.01 integriert Babel

    Das Org-Mode-Projekt hat mit Version 7.01 eine neue Major-Version der Todo- und Outlining-Erweiterung für den Editor Emacs veröffentlicht.

  • Individuelle Lesehilfe

    Programmcode schreiben ohne Syntax-Highlighting ist mühsam und fehlerträchtig. Damit auch Liebhaber seltener Sprachen in den Genuss der praktischen Lesehilfe kommen, untersucht diese Bitparade, wie und wie gut sich in Kate, Emacs und Netbeans neue Sprachen integrieren lassen.

  • Emacs

    Den Texteditor Emacs gibt es seit Jahrzehnten und die Community entwickelt ihn stets weiter. Zu seinem Erfolgsrezept gehören die Erweiterbarkeit, eine freie Lizenz und eine kreative Anhängerschaft.

  • Shime: neuer Emacs-Modus für Haskell

    Der Haskell-Programmierer Chris Done hat einen neuen Emacs-Modus namens Shime für die interaktive Arbeit mit der funktionalen Programmiersprache geschaffen.

  • Org-Contacts macht Org-Mode zum Adressbuch

    Der französische Entwickler Julien Danjou hat Org-Contacts vorgestellt, eine neue Emacs-Erweiterung, die Adressbucheinträge mit Hilfe des Org-Modus speichert.

comments powered by Disqus

Ausgabe 06/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.