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