Login
Login-Name Passwort


 
Newsletter
Werbung

Do, 28. Juli 2016, 15:00

Vortasten mit Emacs-Lisp

Das Ändern von Tastenbelegungen ist ein guter Einstieg, sich mit den Begriffen und Konzepten von Emacs vertraut zu machen und Emacs Lisp zu üben.

Im Artikel »Emacs – Moderne Antike« wurden bereits einige Vorzüge von Emacs vorgestellt. Ein besonderes Merkmal von Emacs ist, dass es sich um einen Editor handelt, der in einen Interpreter eingebettet ist. Dies lässt es zu, Emacs sogar während seiner Ausführung beinahe nach Belieben anzupassen. Um dieses Potential nutzen zu können, ist es wichtig, sich mit den Grundzügen der programminternen Sprache Emacs Lisp, sowie mit den teilweise ungewohnten Begriffen und Konzepten von Emacs vertraut zu machen. Das Ändern von Tastenbelegungen ist ein guter Einstieg, sich darin zu üben und Thema dieses Artikels.

Durch die Vielfalt von Emacs kann man am Anfang leicht den Überblick verlieren. Sobald man sich etwas mit den Eigenheiten der Emacs-Welt und der Sprache Emacs Lisp vertraut gemacht hat, merkt man aber, dass die Entwickler die Schnittstellen sowie das Programm selbst gut strukturiert haben.

Jargon und Grundlagen

Ein Begriff, über den man zu Beginn relativ schnell stolpert, ist der des »Buffers«. Ein Buffer entspricht augenscheinlich dem, was in anderen Programmen als Tab bezeichnet wird. Ein Emacs-Buffer ist aber auch eine Datenstruktur, in der die angezeigten Inhalte mit der Hilfe von Emacs-Lisp weiterverarbeitet werden können. Das ist aber für den Anfang weniger von Bedeutung. Wichtiger ist zunächst das Konzept, dass ein Buffer eine Art separierte Umgebung in Emacs bereitstellt. In dieser Umgebung können Einstellungen gesetzt werden, die dann speziell für diesen Buffer gelten. Dazu gehören z.B. Definitionen für spezifische Tastenbelegungen, aber auch viele weitere Einstellungen, die beeinflussen, wie die Daten von Emacs in einem Buffer dargestellt und interpretiert werden.

Jeder Buffer befindet sich immer in einem sogenannten »Major-Mode«. Diese Major-Modes bestimmen die grundsätzlichen Eigenschaften eines Buffers und werden abhängig vom Verwendungszweck des Buffers gewählt. In einem Buffer kann zu einem Zeitpunkt immer nur ein einziger Major-Mode aktiv sein.

Den Major-Mode wählt Emacs abhängig von dem Dateityp einer zu öffnenden Datei oder aufgrund gewisser Regeln, die man natürlich beliebig anpassen kann. Man hat auch immer die Möglichkeit, den Major-Mode eines Buffers manuell durch die Ausführung des entsprechenden Mode-Befehls zu ändern. Zur besseren Veranschaulichung betrachten wir ein Beispiel. Wenn man z.B. eine Datei mit der Erweiterung .py öffnet, wird dann für den Buffer automatisch der Python-Mode aktiviert. Wenn man jetzt anfängt, gültigen Python-Code zu schreiben, wird dieser entsprechend farbig markiert und man kann beispielsweise mit »Strg + c« »Strg + c« den Code an einen Python-Interpreter schicken. Durch Drücken der Tasten »Alt + x« und anschließende Eingabe des Befehls text-mode verliert man nun sämtliche Features des Python-Modes und alles verhält sich so, als wenn man eine normale Textdatei in Emacs geöffnet hätte.

Neben dem Major-Mode kann jeder Buffer zusätzlich eine beliebige Anzahl von Minor-modes aktivieren, welche den Buffer um zusätzliche Features erweitern. Dabei handelt es sich oft um Features, die generell nützlich sind, also weniger abhängig von dem Verwendungszweck eines Buffers sind als der Major-Mode. Ein Beispiel ist der »Electric-Pair-Mode«, welcher unter anderem das Einfügen von geschlossenen Klammern automatisiert, wie man es auch von vielen anderen Code-Editoren kennt.

Sowohl Major- als auch Minor-Modes können festlegen, was beim Drücken einer Taste geschehen soll. Zusätzlich gibt es Tastenzuweisungen, die global gesetzt werden, sowie noch einige weitere Mechanismen, die in den von Emacs intern verwendeten Objekten des Buffertextes selbst definiert werden. Diese ermöglichen beispielsweise klickbare Links in Buffern. Welche Tastenzuweisung sich bei konkurrierenden Definitionen durchsetzt, ist durch eine Hierarchie von sogenannten »Keymaps« geregelt. Diese Keymaps werden nach dem Drücken einer Taste in einer bestimmten Reihenfolge durchsucht, bis Emacs in einer dieser Maps fündig wird.

Für den Anfang sind die Keymaps, welche in den Textobjekten selbst definiert werden, weniger interessant. Allerdings ist es gut zu wissen, dass es sie gibt, und dass sie von der Priorität her sogar höher liegen als die Keymaps der minor-modes. Die Keymaps von Minor-Modes überlagern hingegen wiederum die lokale Keymap eines Buffers, welche normalerweise durch den Major-Mode festgelegt wird. Nachdem alle diese Keymaps durchsucht wurden, gibt es noch die Global-Map, welche die letzte Keymap ist, welche nach Zuweisungen von Tasten durchsucht wird.

Mit diesem Hintergrundwissen kann man anfangen, sich in die Praxis zu begeben und lernen, wie man mit etwas Emacs Lisp-Code die Tastenbelegungen anpassen kann.

Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung