Inhalt

4. Den Emacs anpassen

Praktisch die gesamte Emacs-Anpassung geschieht über den Lisp-Code. Man kann Variablen verändern, die Einfluss darauf nehmen, wie der Emacs arbeitet oder man kann dem Emacs neue Funktionen hinzufügen oder bereits existierende Funktionen aufheben und durch eigene ersetzen.

4.1 Temporäre Anpassung

Das Experimentieren mit der Emacs-Anpassung möchten Sie wahrscheinlich so gestalten, dass sie temporär bleibt. Wenn man was ganz schrecklich Falsches macht, braucht man nur »C-x C-c« einzugeben, um den Emacs zu schließen und wieder zu starten. Sobald Sie herausgefunden haben, welche der Veränderungen Sie gerne für immer hätten, können Sie sie zur eigenen .emacs-Datei hinzufügen, so dass sie bei jedem Start von Emacs geladen werden. Dies wird im nächsten Abschnitt besprochen.

Variablen-Zuweisung

Die einfachsten Anpassungen erreicht man durch das Ändern des Wertes einer Variablen im Emacs. Der Lisp-Code, um dies zu tun, sieht so aus:

(setq variable-name new-value)

Wobei »variable-name« der Name der Variablen ist und »new-value« der Wert, den Sie der Variablen übergeben möchten. Im Lisp-Jargon bindet man eine Variable an einen Wert. Die »setq« Funktion in Lisp entspricht den Bestimmungsoperatoren (meist »=«) in anderen Programmiersprachen.

Beachten Sie: Ich gehe hier - um der Einfachheit willen - über viele Details hinweg. Es kann auch sein, dass man mich oder andere beim Benutzen der Lisp-Funktionen »set« und sogar »setq-default« sieht. Wer wirklich neugierig ist, sollte sie einfach in einer Emacs Lisp Referenz nachsehen.

Betrachten wir eine Zeile aus meiner .emacs-Datei:

(setq-default transient-mark-mode t)

Die Variable »transient-mark-mode« steuert, ob eine Region hervorgehoben wird, wenn ich sie markiere oder nicht. Bei vielen GUI Applikationen wird sie invertiert oder einer anderen Farbe hervorgehoben, wenn man klickt und die Maus zieht, um einen Textbereich auszuwählen. Der Emacs macht das gleiche, wenn die Variable des »transient-mark-mode« auf einen nicht-»nil« Wert gesetzt wurde.

Was für einen Wert?

Okay. Kurzer Exkurs. Die meisten Programmiersprachen unterscheiden zwischen wahr/falsch Werten. In C/C++ wird ein Wert als wahr betrachtet, wenn er ein Wert ungleich Null ist. In Perl ist ein non-null oder non-zero Wert wahr. In Lisp, existiert die gleiche Idee, aber die Namen und Symbole sind andere.

Wahr wird gewöhnlich als »t« geschrieben und falsch (oder Null) als »nil«. Wie in anderen Sprachen, wird jedoch jeder nicht-»nil« Wert als wahr betrachtet.

Für die vollständige Beschreibung dessen, was »transient-mark-mode« tut, kann man die Online-Hilfe benutzen. Tippen Sie »C-h v« oder »M-x describe-variable« und dann »transient-mark-mode«. Wenn man faul ist wie ich, kann man sich durch Gebrauch der »Tab«-Taste die Variablennamen-Ergänzung zu Nutze machen. Tippen Sie einen Teil des Variablennamens ein und schlagen Sie die »Tab«-Taste an. Wenn genug eingetippt wurde, sodass der Emacs es eindeutig identifizieren kann, wird der vollständige Name für Sie ergänzt.

Eine weitere Variable, die oft gesetzt wird, ist »fill-column«. Sie sagt dem Emacs, wie weit der Bildschirm beim Zeilenumbruch (und der »auto-fill-mode« respektiert diesen Wert) sein sollte. Um mal einen absurden Wert einzugeben, könnte man eintippen:

(setq fill-column 20)

Aber dann passiert eigentlich nichts. Man muss den Emacs anweisen, den Ausdruck, den man eingetippt hat, auszuwerten. Um das zu tun, stellen Sie den Cursor an das Ende des Ausdrucks und tippen »C-x C-e«, dies ruft die Funktion »eval-last-sexp« auf (für den Fall, dass es Sie interessiert). Wenn Sie das tun, werden sie feststellen, dass »20« (oder welchen Wert auch immer sie genommen haben) im Mini-Puffer am unteren Rand des Bildschirms wiedergegeben wird. Dies ist nur der Rückgabewert des Ausdrucks, den Sie ausgewertet haben.

Nur um zu zeigen, dass es funktioniert - tippen Sie einen oder zwei Sätze ein. Wenn Sie den »auto-fill-mode« eingeschaltet haben (haben sie wahrscheinlich nicht), werden Sie den Zeilenumbruch nach dem 20. Zeichen erleben. Oder, wenn Sie irgend etwas eingegeben haben, tippen Sie »M-q«, es ruft die Funktion »fill-paragraph« auf. Sie wird dann den Zeilenumbruch ausführen.

Zuordnung von Dateinamen

Sie können den Emacs so konfigurieren, dass er automatisch etwas tut, wenn Sie eine Datei eines bestimmten Typs öffnen (so wie einige GUIs automatisch eine bestimmte Applikation starten, wenn man auf das Icon klickt). Zum Beispiel, möchte ich vielleicht, dass der Emacs jedes Mal automatisch zum Textmodus wechselt, wenn ich eine Datei mit einer .txt-Endung öffne. Nun, das passiert bereits :-). Sagen wir also dem Emacs, dass er in den Textmodus geht, wenn Sie eine Datei namens README öffnen.

(setq auto-mode-alist (cons '("README" . text-mode) auto-mode-alist))

Huh?

Ohne tief in die Lisp-Programmierung einzutauchen, die Sie wirklich nicht kennen müssen (es würde Ihnen aber nicht weh tun, sie zu lernen), lassen Sie mich einfach sagen, dass die Variable »auto-mode-alist« eine Liste von Paaren enthält. Jedes Paar enthält einen regulären Ausdruck und einen Emacs-Modus-Namen. Wenn eine Datei, die Sie öffnen, dem regulären Ausdruck entspricht (in diesem Fall, die Zeichenkette »README«), startet der Emacs den Modus, den Sie festgelegt haben.

Die merkwürdige Syntax oben ergibt sich deshalb, weil man im Grunde genommen ein weiteres Paar an die Modusliste anfügt. Sie würden nicht wollen, etwas der »auto-mode-alist« zuzuordnen, ohne sicher zu stellen, dass die Werte, die sie bereit hält, nicht verloren gehen.

Und wenn ich wollte, dass der Emacs jedes Mal automatisch zum (html-helper-mode wechselt, wenn ich eine Datei öffne, die auf .html oder .htm endet, würde ich folgendes meiner .emacs Datei hinzufügen:

(setq auto-mode-alist (cons '("\\.html$" . html-helper-mode) auto-mode-alist))
(setq auto-mode-alist (cons '("\\.htm$" . html-helper-mode) auto-mode-alist))

Die Möglichkeiten sind wirklich unbegrenzt.

4.2 Der Umgang mit der ».emacs«-Datei

Wenn man etwas Zeit mit dem Emacs verbracht hat und eine grundlegende Vorstellung davon hat, welche Vorteile eine Anpassung hätte, möchte man wahrscheinlich ein paar Dinge dauerhaft anpassen (oder mindestens so lange, bis man seine Meinung geändert hat). Wenn Sie täglich mit dem Emacs arbeiten, werden Sie auch feststellen, das die .emacs-Datei mit der Zeit immer größer wird. Das ist eine gute Sache, denn es bedeutet, das Sie herausgefunden haben, wie Sie den Emacs dazu bringen so zu arbeiten, wie Sie wollen. Es ist eine Schande, dass viele Softwareprodukte Sie das nicht tun lassen.

Für den Fall, das Sie es noch nicht erraten haben, jedes Mal, wenn der Emacs gestartet wird, sucht er eine .emacs benannte Datei in Ihrem Homeverzeichnis. Sie sollten Lisp-Code, den Sie automatisch laufen lassen möchten, in Ihre .emacs-Datei schreiben und das schließt die Art von Anpassung ein, die hier gerade behandelt wurde.

Ein weiteres Beispiel aus meiner .emacs-Datei:

(setq inhibit-startup-message t)

Die Variable »inhibit-startup-message« steuert, ob der Emacs die Willkommensmeldung anzeigt, wenn er startet. Nach einer Weile war ich es leid, sie zu betrachten (da ich wußte, wie ich Hilfe finden konnte und was weiß ich). Deshalb suchte ich nach einem Weg, sie auszuschalten.

Zur Übung versuchen Sie eine eigene .emacs-Datei zu erstellen und fügen Sie diese Zeile an. Dann schließen Sie den Emacs und starten ihn wieder. Die Willkommensmeldung sollte nicht mehr erscheinen.

Oft, wenn Sie etwas über einen Emacs-Modus (oder ein Paket) lesen, wird in der Dokumentation vorgeschlagen, einen Code an die eigene .emacs-Datei anzuhängen, um den Modus oder das Paket auf eine bestimmte Art und Weise arbeiten zu lassen.

Die GNU Emacs FAQ (»C-h F«) enthält einige Themen, die sich auf .emacs-Dateien beziehen und die Sie möglicherweise nützlich finden.

4.3 Das customize-Paket

Als der Emacs populärer wurde und sich kontinuierlich entwickelt hat, hat vielleicht irgendwer einmal gesagt: »es muß für Einsteiger einen besseren Weg geben, um ihren Emacs anzupassen«. Und customize wurde geboren.

Mit customize gibt es eine intuitivere Möglichkeit, Teile des Emacs anzupassen. Um es auszuprobieren, sehen Sie sich entweder das Customize-Untermenue in Ihrem Help Menue an, oder tippen »M-x customize«.

Customize unterteilt die Anpassung in sinnvolle Gruppen wie »Editieren«, »Programmieren«, »Dateien« und so weiter. Einige Gruppen enthalten Untergruppen.

Wenn Sie Veränderungen vornehmen, in dem Sie customize benutzen, speichert der Emacs diese Veränderungen in Ihrer .emacs-Datei. Das ist ziemlich praktisch, weil Sie leicht die Veränderungen einsehen und verändern können, die er für Sie gemacht hat.

Ich benutze das Customize Interface nicht, deshalb kann ich nicht viel mehr darüber sagen.

4.4 X Window

Wie jede gut erzogene X Applikation respektiert der Emacs Ihre X Ressourcen. Das bedeutet, Sie können die ursprünglichen Farben, Geometrie und andere X-spezifischen Dinge steuern, genau wie bei xterm, nxterm oder was auch immer.

Hier ist der relevante Teil meiner ~/.Xdefaults Datei:

emacs*Background: DarkSlateGray
emacs*Foreground: Wheat
emacs*pointerColor: Orchid
emacs*cursorColor: Orchid
emacs*bitmapIcon: on
emacs*font: fixed
emacs.geometry: 80x25

Lesen Sie die Manual Page zu X, um mehr Einzelheiten über X Ressourcen zu erfahren.

Chris Gray ( cgray4@po-box.mcgill.ca) stellt auch fest:

Debian benutzt anscheinend die ~/.Xdefaults nicht. Wie dem auch sei, Debian-Leute können das, was sie gerade eingegeben haben, in /etc/X11/Xresources/emacs schreiben und bekommen dann die gleichen schönen Farben, die sie bekommen hätten, wenn Sie RedHat benutzen würden.


Inhalt