Das Anpassungssystem ist eine integrierte Funktion von Emacs, mit der genau das von Ihnen beschriebene Problem gelöst werden kann. Die Programmierung ist möglicherweise nicht die ideale Methode für den Durchschnittsbenutzer, um seinen Editor zu konfigurieren.
Der primäre Einstiegspunkt für die Anpassungsfunktionalität ist M-x customize RET
(oder Options > Customize Emacs > Top-level Customization Group
über das Menü). Von dort aus sehen Sie ein interaktives Menüsystem zum Anpassen von Einstellungen. Diese Schnittstelle erzwingt, dass alle Einstellungen vom richtigen Typ sind (Zahl, Zeichenfolge, Farbe usw.), wodurch eine Hauptfehlerquelle vermieden wird, die bei der programmgesteuerten Konfiguration von Emacs auftritt. Wenn der Benutzer Änderungen, die er über die Benutzeroberfläche vornimmt, beibehalten möchte, werden die Einstellungen in einem speziellen Abschnitt in der Initialisierungsdatei des Benutzers gespeichert (read:) .emacs
.
defcustom
Dies ist ein Wrapper für die Emacs Lisp-Funktionalität auf niedrigerer Ebene defvar
, der die Variable deklariert und in der Anpassungsschnittstelle sichtbar macht. Außerdem kann der Entwickler zusätzliche Metadaten bereitstellen, die für die Anzeige eines geeigneten interaktiven Steuerelements erforderlich sind - dh welche Art von Wert ist in dieser Variablen gespeichert? Eine beliebige Zeichenfolge? Eine Zahl? Eine Auswahl aus einer festen Auswahl? etc. defgroup
ist ein Gruppierungskonstrukt für diese anpassbaren Optionen, damit sie in einer schönen Hierarchie angeordnet werden können.
Diese Funktion sollte immer dann verwendet werden, wenn ein Datenelement als konfigurierbare Option für den Benutzer und nicht als internes Detail der Bibliothek betrachtet werden soll.
Hier ist ein einfaches Beispiel aus einer kleinen Bibliothek von mir:
(defgroup checkbox nil
"Quick manipulation of textual checkboxes."
:group 'convenience)
(defcustom checkbox-states '("[ ]" "[x]")
"Checkbox states to cycle between.
First item will be the state for new checkboxes."
:group 'checkbox
:type '(repeat string))
Das defgroup
schafft eine neue Gruppe innerhalb der Anpassungsschnittstelle unter dem Top-Level - convenience
Elemente. Ich brauchte dann eine Variable, um die möglichen Checkbox-Zustände zu speichern. Ich hätte verwenden können defvar
, aber da ich möchte, dass dies einfach anpassbar ist, habe ich mich für die Verwendung entschieden defcustom
. Der :group
Abschnitt gibt an, dass er zur zuvor definierten Gruppe gehört, und der Abschnitt gibt an, :type
dass es sich um eine Folge von Zeichenfolgen handelt. Es gibt auch einen Standardwert und eine Beschreibung. Es gibt auch zusätzliche Möglichkeiten (hier nicht gezeigt), um vom Benutzer eingegebene Werte zu transformieren.
Wenn ich jetzt renne M-x customize RET
und navigiere Convenience > Checkbox
, sehe ich Folgendes:
Es ist nicht die schönste Benutzeroberfläche der Welt, aber beachten Sie, dass es interaktive Tools zum Anpassen des Werts von "Checkbox States" ( checkbox-states
intern) gibt. Es zeigt die aktuellen Zeichenfolgenwerte zusammen mit den Schaltflächen INS
(Einfügen) und DEL
(Löschen) an und ermöglicht es uns, die Zeichenfolgenwerte in Bearbeitungsfeldern zu bearbeiten. Wenn wir fertig sind, können wir entscheiden, ob wir unsere Änderungen übernehmen, zurücksetzen oder für zukünftige Sitzungen übernehmen und speichern möchten.
customize
werden müssen und wann sie von Hand angepasst werden müssen? Oder möchten Sie einen Modus schreiben? Letzteres ist die Situation, in der Sie tatsächlich Dinge wiedefcustom
und dergleichen benutzen .