VOICE Homepage: http://de.os2voice.org
April 2001

[Newsletter Inhalt]
[Vorherige Seite] [Nächste Seite]
[Artikelübersicht]

editor@os2voice.org


Emacs 20.6.1 unter OS/2 -
Teil 2

Von Oliver Heidelbach ©April 2001, Übersetzung: Christian Hennecke

(Anm. d. Red.:  Emacs ist ein Programm zum Editieren von Dateien wie HTML, TeX oder anderen Texten, welches
kontext-sensitive Hilfe und eine grafische Oberfläche besitzt und in einem elisp genannten Lisp-Dialekt
erweitert und angepasst werden kann. Weitere Informationen finden Sie unter <http://www.gnu.org/software/emacs/emacs.html>.)

Ursprünglich war geplant, einen guten Teil dieses Artikels der Konfiguration für E-Mail zu widmen. Da sich herausgestellt hat, daß die aktuelle Portierung von Emacs noch einige grundlegende Probleme damit hat, als zuverlässiger E-Mail Klient zu dienen, habe ich diese Idee fallengelassen. Statt dessen werfen wir einen Blick auf ein paar andere Sachen, aber lesen Sie weiter...

Erweiterte Konfiguration

Emacs ist ein erweiterbarer Editor. Er wird mit vielen in Elisp - der Emacs-eigenen Lisp Programmiersprache - geschriebenen Erweiterungen geliefert, die über die Jahre entwickelt wurden. Alle Dateien, die offiziell Teil der Emacs-Distribution sind, befinden sich im Lisp-Verzeichnis x:\emacs\20.6.\lisp.

Sie müssen nicht Elisp lernen, um Emacs effizient nutzen zu können. Die eine oder andere Änderung in den Emacs-Konfigurationsdateien allerdings erfordert keine großartigen Kenntnisse und Sie kommen nicht daran vorbei, wenn Sie zusätzliche Elisp-Pakete installieren wollen. Beachten Sie bitte, daß eben dieses Problem durch die neu eingeführten Emacs Konfigurationsmenüs verringert wird, die ich in Teil 1 dieses Artikels angesprochen habe.

Es werden ständig neue Elisp Codeschnipsel und Problemlösungen geschrieben und nicht alle älteren haben es in die offizielle Distribution geschafft. Viele davon werden in der Usenetgruppe gnu.emacs.sources veröffentlicht, andere werden auf Seiten wie http://www.cis.ohio-state.edu/emacs-lisp/, dem kürzlich wiedereröffneten alten offiziellen Archiv an der Ohio State University, oder bei http://anc.ed.ac.uk/~stephen/emacs/ell.html, einer privat gepflegten Sammlung mit vielen aktuellen Codebeispielen.

Während die meisten dieser Elisp-Erweiterungen problemlos unter OS/2 funktionieren, tun es manche wiederum nicht. Ein Beispiel von allgemeinem Interesse, das ich gefunden habe, ist browse-url.el.

browse-url.el

browse-url.el stellt eine Schnittstelle zu den meisten verbreiteten Webbrowsern aus jedem Emacs-Buffer bereit. Einmal installiert können Sie jede URL einfach durch Eingabe einer Tastenkombination aufrufen.

browse-url.el funktioniert auch unter OS/2, aber es arbeitet nicht richtig mit Netscape. Tatsächlich nimmt es an, daß Netscape für Un*x installiert ist.

In der Funktion (defun browse-url-netscape (url &optional new-window) muß die Anweisung

  (if (eq window-system 'w32)
      (list url)
    (append
     (if new-window '("-noraise"))
     (list "-remote"
           (concat "openURL(" url
                   (if new-window ",new-window")
                   ")"))))))))

in folgende geändert werden:

  (if (memq window-system '(w32 pm))  ;; ready for OS/2 Warp ;-)
      (list url)
    (append
     (if new-window '("-noraise"))
     (list "-remote"
           (concat "openURL(" url
                   (if new-window ",new-window")
                   ")"))))))))

Laden Sie die OS/2-angepaßte browse-url.el herunter.

HTML Helper Mode

Auch wenn man Emacs für Dinge verwenden kann, bei denen man nicht erwarten würde, daß ein Editor sie beherrscht, wie z.B. Mail und News verschicken, Plotten einer Mandelbrotmenge, Tetris spielen etc., so ist der ursprüngliche Zweck natürlich das Editieren.

Elisp-Programme, die Funktionen für das Editieren und/oder Syntaxhighlighting für bestimmte Dateitypen bereitstellen, werden Modes genannt. Einer dieser Modes, der es noch nicht in die offizielle Distribution geschafft hat, aber nichtsdestotrotz sehr populär ist, ist der von Nelson Minar eingeführte HTML Helper Mode. Es gibt eine eigene Homepage im WWW unter http://www.santafe.edu/~nelson/tools/.

Die Installation eines neuen Modes für Emacs ist leicht. Kopieren Sie einfach die entsprechende Elisp-Datei, in diesem Fall html-helper-mode.el, in Ihr persönliches Lisp-Verzeichnis, z.B. x:\emacs\lisp. Entweder laden Sie dann die Datei in Emacs und byte-kompilieren Sie sie über das Menü Emacs-Lisp oder verwenden Sie den folgenden Befehl in der OS/2 Kommandozeile:

emacs -batch -q -no-site-file -f batch-byte-compile html-helper-mode.el

Byte-Kompilierung wird auf normal lesbare Elisp-Dateien angewendet, um diese kompakter und für Emacs schneller abarbeitbar zu machen. Byte-kompilierte Dateien haben die Erweiterung *.elc und können nicht mehr normal gelesen werden, also löschen Sie bitte die ursprüngliche Elisp-Datei nicht.

Nun, da Sie Ihren ersten Mode installiert haben, müssen Sie ein paar Dinge in Ihrer site-start.el oder .emacs Datei anpassen. (Siehe Teil 1 dieses Artikels für eine Erläuterung.)

Setzen Sie folgendes in Ihre Emacs Konfigurationsdatei:

(setq auto-mode-alist (cons '("\\.htm.*$" . html-helper-mode)
   auto-mode-alist))
(autoload 'html-helper-mode "html-helper-mode" "Yay HTML" t)

Damit wären Sie mit der Standardkonfiguration fertig. Die meisten der externen und sogar ein paar der internen Elisp-Modes erfordern solche kleinen Anpassungen. Eine Beschreibung der anwenderdefinierbaren Variablen und anderer Dinge, die angepaßt werden müssen, finden Sie in den Kommentaren am Anfang der Elisp-Dateien selbst.

Da sind noch andere Dinge, die Sie wahrscheinlich definieren möchten. Vielleicht möchten Sie die Formatierung des Zeitstempels ändern, den der HTML Helper Mode anbietet. Eine mögliche Lösung wäre die folgende:

(defun my-html-helper-default-insert-timestamp ()
  "Default timestamp insertion function"
  (insert "[<EM>" (current-time-string) "</EM>]\n"))
(setq html-helper-timestamp-hook 'my-html-helper-default-insert-timestamp)

(setq html-helper-do-write-file-hooks t
      html-helper-build-new-buffer t
      html-helper-use-expert-menu t
      html-helper-address-string "<STRONG>* page title *</STRONG>
      Oliver Heidelbach <A HREF=\"mailto:ohei@snafu.de\"><ohei@snafu.de></A>")

Diese Anweisungen formatieren die Zeitstempel-Zeichenkette standardmäßig als kursiv, schalten das Expertenmenü ein und personalisieren die Zeichenkette, die unterhalb von HTML-Dokumenten eingefügt wird.

HTML Helper Mode bietet auch eine Funktion, um eine Schablone für neue HTML-Dateien zu erstellen. Als Beispiel dient wieder die Einstellung aus meiner eigenen site-start.el. Falls Sie diese benutzen wollen, um Ihre eigene Schablone zu definieren, vergessen Sie bitte nicht, Ihren Namen und die E-Mail-Adresse an den geeigneten Stellen einzutragen.

(setq html-helper-new-buffer-template
  '("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 TRANSITIONAL//EN\">\n"
    "<!-- comment line 1 -->\n<!-- comment line 2  -->\n"
    "<HTML>\n<HEAD>\n"
    "<LINK REV=\"owns\" TITLE=\"Oliver Heidelbach, Berlin, Germany\" HREF=\"mailto:ohei\@snafu.de\">\n"
    "<META NAME=\"Author\" CONTENT=\"Oliver Heidelbach\">\n"
    "<META NAME=\"DESCRIPTION\" CONTENT=\"******\">\n"
    "<META NAME=\"KEYWORDS\" CONTENT=\"******\">\n"
    "<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html;CHARSET=iso8859-1\">\n"
    "<TITLE>" p "</TITLE>\n"
    "</HEAD>\n\n"
    "<BODY>\n"
    "<H1>" p "</H1>\n\n"
    p
    "\n\n<HR>\n"
    "<ADDRESS>" html-helper-address-string "</ADDRESS>\n"
    html-helper-timestamp-start
    html-helper-timestamp-end
    "\n</BODY>\n</HTML>\n"))

Das obere stellt schon eine recht vollständige Konfiguration des HTML Helper Mode dar und meine tatsächliche Konfiguration weicht nicht sehr viel davon ab.

HTML template automatically genenerated by HTML helper mode
Abb.1: Vom HTML Helper Mode automatisch generierte HTML-Schablone

Wechseln der Zeichensätze unabhängig von Mule

Wenn Sie außerhalb der USA leben, ist es höchstwahrscheinlich, daß Sie wollen, daß Ihr Editor nicht nur einen erweiterten ASCII-Zeichensatz nutzen kann, sondern auch Dokumente mit ISO-8859-1-Zeichensatz, der im Internet weit verbreitet ist, editieren kann. Natürlich kann das auch für Sie von nutzen sein, wenn Sie in den USA leben.

Vor einer Weile wurde MULE in die offizielle Emacs-Distribution aufgenommen und diese Portierung bringt es nun auch auf die OS/2 Plattform. MULE ist eine Akronym und steht für 'Multilingual Enhancement of GNU Emacs'. Auch wenn MULE Emacs wirklich jede Sprache der Welt inklusive solcher mit Multibyte-Zeichensätzen wie Chinesich, Japanisch oder Koreanisch verstehen läßt, schauen wir uns eine andere Lösung an, die auch für ältere Versionen von Emacs ohne MULE geeignet ist.

Das folgende nutzt iso-pc.el, ein von Carsten Leonhardt geschriebenes Codeschnipsel. Kopieren Sie wie schon zuvor die Datei einfach in Ihr persönliches Lisp-Verzeichnis.

Fügen Sie folgendes zu Ihrer Emacs-Konfigurationsdatei hinzu:

;;; Set ISO-8859-1 character set up for correct use with mails, postings etc.
;; (require 'iso-syntax)  ;; only needed for version 19.xx
(require 'iso-pc)

Das wär's eigentlich schon, aber nun beschäftigen wir uns noch mit ein paar selbstgeschriebenen Erweiterungen, die das Leben wirklich einfach machen sollten. Fügen Sie einfach folgendes Ihrer Emacs-Konfigurationsdatei hinzu und plazieren sie es unterhalb des oberen Codes.

(defun my-show-current-code-page ()
  "Show active codepage"
  (interactive)
  (if (equal (current-code-page) '1004)
      (message (concat "Active codepage is " (current-code-page) " \(ISO-8859-1\)"))
    (message (concat "Active codepage is " (current-code-page) " \(PC\)"))))

(defun my-toggle-code-page ()
  "Toggle codepage between 850 \(PC\) and 1004 \(ISO-8859-1\)"
  (interactive)
  (if (equal (current-code-page) '1004)
      (set-code-page '850)
    (set-code-page '1004))
  (message (concat "Using codepage " (current-code-page))))

(defun my-toggle-charset ()
  "Toggle codepage between 850 \(PC\) and 1004 \(ISO-8859-1\)"
  (interactive)
  (if window-system
      (my-toggle-code-page)
    (iso-pc)))

(global-set-key [f9] 'my-toggle-charset)
(global-set-key [C-f9] 'my-show-current-code-page)

Die erste Funktion, my-show-current-code-page, zeigt den momentan aktiven Zeichensatz im Mini-Buffer, dem Bereich ganz unten im Emacs-Fenster, an. Dies ist für den Fall, daß wir vergessen, welcher Zeichensatz aktiv ist. Die beiden letzten Funktionen verrichten die Arbeit des eigentlichen Umschaltens zwischen den Zeichensätzen.

Schließlich legen wir die Funktionen auf passende Funktionstasten auf der Tastatur. Unter Nutzung des oberen Beispiels schaltet die Funktionstaste <F9> den Zeichensatz hin und her; die Tastenkombination <STRG-F9> zeigt, welche der beiden Alternativen gerade aktiv ist. Sie können die Tastaturzuweisungen natürlich Ihren eigenen Bedürfnissen anpassen.

Wenn Sie die Zeile CODEPAGE=437,1004 in Ihrer CONFIG.SYS verwenden, können Sie die Zeichensätze nicht nur in Emacs, sondern in jeder OS/2-Sitzung mit chcp 1004 bzw. chcp 437 wechseln. Der OS/2 Zeichensatz 1004 ist zwar nicht gleich dem ISO-8859-1 Zeichensatz, aber sehr ähnlich. (Anm. d. Red.: Einige Programme, wie z.B. DeScribe, benötigen zwingend den Zeichensatz 850!)

edit-history.el

Ich bin täglicher Emacs-Anwender. Eine Elisp-Erweiterung, ohne die ich persönlich nicht mehr leben kann, ist edit-history.el. Sie bietet einen zusätzlichen Menüeintrag in der Menüleiste, der die zuletzt bearbeiteten Dateien anzeigt. Damit werden Sie in die Lage versetzt, zuvor bearbeitete Dateien mit zwei Mausklicks wieder laden zu können, anstatt dies über das Dateimenü tun zu müssen.

Um die Erweiterung nutzen zu können, kopieren Sie die Datei in Ihr persönliches Lisp-Verzeichnis und fügen Sie Ihrer Emacs-Konfigurationsdatei folgendes hinzu:

;;; Set up a menu displaying the last visited files
(load "edit-history")
(setq ehistory-history-length 25)
;;; which files to ignore
(setq ehistory-ignore-regexp "/\\(browse\\|diary\\|site-diary\\|tags\\|.*rmail.*\\|.*\.tmp\\|.*a[d]*ress.*\\|.*-scores\\|.*\.bbdb\\)$")
(ehistory-load-file-list)

Menu provided by edit-history.el
Abb.2: Von edit-history.el erzeugtes Menü

Laden Sie edit-history.el herunter.


Das wäre es schon. Ich danke Ihnen für Ihre Aufmerksamkeit und hoffe, daß diese Artikel Interesse an diesem mächtigen Editor geweckt haben. Es gibt Portierungen von Emacs für fast jede Plattform, einschließlich der meisten Un*x-Arten, Windows, Amiga, Atari und natürlich OS/2. Emacs-Anwender gibt es überall auf der Welt und das Internet und das Usenet sind voll von Codeschnipseln, Problemlösungen und Diskussionsforen. Falls Sie diesen Editor noch nicht getestet haben, probieren Sie Ihn einmal aus.

Quellen:
Emacs 20.6.1 unter OS/2 - Teil 1, Grundlegende Installation und Konfiguration
http://de.os2voice.org/VNL/past_issues/VNL0301H/vnewsf3.htm

Was ist Emacs?
http://www.gnu.org/software/emacs/emacs.html

Elisp Archive im WWW
Ohio State University Archiv http://www.cis.ohio-state.edu/emacs-lisp/
Stephen's private archive http://anc.ed.ac.uk/~stephen/emacs/ell.html

Offizielle, für OS/2 angepaßte Elisp-Dateien
OS/2 ready browse-url.el http://userpage.fu-berlin.de/~oheiabbd/emacs/browse-url.zip

Andere Elisp-Dateien
edit-history.el http://userpage.fu-berlin.de/~oheiabbd/emacs/edit-history.el
HTML Helper Mode Homepage http://www.santafe.edu/~nelson/tools/
iso-pc.el und Funktionen zum Umschalten des Zeichensatzes http://userpage.fu-berlin.de/~oheiabbd/emacs/german-snippets.zip


Meine kommentierte site-start.el http://userpage.fu-berlin.de/~oheiabbd/emacs/emacs206-os2-site-start.html


Oliver Heidelbach ist seit 1993 OS/2-Anwender und seit 1994 Emacs-Anwender. Zur Zeit arbeitet er als Redakteur für die Internet Movie Database (IMDb).


Artikelübersicht
editor@os2voice.org
[Vorherige Seite ] [ Inhalt] [Nächste Seite ]
VOICE Homepage: http://de.os2voice.org