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:
~/.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.
|
|