2011-01-05 6 views
9

Emacs hat diese scheinbar sehr nette Einrichtung für Gebäude autoload Dateien basierend auf magischen Quellcode-Kommentare ("autoload Cookies") der Form ;;;###autoload, die auf Linien von sich selbst unmittelbar über jeder Definition platziert werden automatisch geladen werden; siehe (elisp)Autoload.Emacs Autoload-Dateien für vom Benutzer installierte elisp beibehalten?

Dies scheint ein ideales Werkzeug zu sein, um Autoloads für die kleinen Ein-Datei-Pakete zu verwalten, die Emacs-Benutzer unweigerlich in ihren Profilen installieren. Es gibt nur ein kleines Problem: Diese Einrichtung (jedenfalls in GNU Emacs) scheint fast ausschließlich darauf ausgerichtet zu sein, die Datei loaddefs.el für Emacs selbst zu erzeugen, mit sehr geringen (wenn überhaupt) Zugeständnissen an andere Verwendungen.

Das hört nicht auf, große Pakete von der autoloads.el Maschinerie zu verwenden, um ihre eigenen Autoload-Dateien zu bauen, aber die, die ich angeschaut habe, haben ein ziemlich bisschen haarigen Code, der dafür gemacht wird, das zu tun, was gebraucht wird, obwohl einige Die Haarigkeit könnte durch die Abweichung von GNU Emacs/XEmacs bedingt sein.

(Ich denke, XEmacs ist ein bisschen besser an dieser Front, wahrscheinlich zumindest teilweise aufgrund der Tatsache, dass das offizielle Paketsystem diese Maschinerie verwendet, um separate Autoload-Dateien für jedes Paket zu machen. Hoffentlich GNU Emacs Aufnahme der ELPA Paketsystem, das auch diese Maschinen verwendet, führt zu ähnlichen Verbesserungen auf ihrer Seite)

Also, meine Frage an Sie ist:.

Wie soll ich eine Autoload-Datei für alle .el Dateien in einem Verzeichnis beibehalten , vorausgesetzt, sie haben alle notwendigen ;;;###autoload Kommentare (automatisches Laden von Cookies) bereits vorhanden?

[Hmm. block quotes schauen viel coolor auf tex.SE ...]

Ich benutze derzeit GNU Emacs 23.2.1, obwohl die weiter hinten eine Antwort funktioniert, desto besser. (Es wäre schön, wenn es auch mit XEmacs funktionieren würde.)

Ich bin auf Windows, aber habe MSYS neben Emacs installiert, so dass sh/bash-Skripts wahrscheinlich in Ordnung sein werden, solange sie nicht ' Ich nenne nichts Außergewöhnliches.

[Ich bin nicht ganz sicher, dass das nicht auf Superuser statt SO gehört. Wenn es bereits ein Paket gibt, das dies mit nur einer kleinen Konfigurationsmenge erledigen kann, tut es das wahrscheinlich; Auf der anderen Seite, wenn (wie ich vermute) gibt es nur ziemlich grobe Codeschnipsel, die eine Menge direkte Änderungen erfordern könnten, ich denke, dass es wahrscheinlich hier auf SO gehört.]

+0

Huh, es scheint, dass jemand anderes als ich dies favorisiert, aber nicht aufgewertet hat: 2 Benutzer haben es favorisiert (eine davon bin ich, denke ich), aber es gibt überhaupt keine Stimmen. Ich frage mich, warum das ist - Vergesslichkeit? – SamB

Antwort

2

Check out this answer zu "emacs23/elisp: how to properly autoload this library?".

Zusammengefasst Dump Sie alle Pakete in einem bestimmten Verzeichnis, und erstellen Sie ein Paket Ihrer eigenen update-auto-loads.el, die die loaddefs.el baut und liefert eine Funktion, die Sie regelmäßig ausführen können die loaddefs.el Datei neu zu erstellen, wann immer Sie wollen.

0

Im Jahr 2017 müssen Sie es nicht selbst pflegen. Stattdessen können Sie einen modernen Paketmanager wie straight.el verwenden, der speziell dafür entwickelt wurde (und viele andere Dinge).

Sie package.el statt straight.el verwenden könnte, aber package.el hat eine Reihe von schwerwiegenden Problemen, und eine besonders relevant ist, dass es sehr umständlich ist package.el zu bekommen ein lokales Paket laden Sie selbst geschrieben haben, insbesondere package.el hat absolut keine Unterstützung für Änderungen an einem Paket nach der Installation.

Sie könnten auch andere Paketmanager verwenden. Ich schrieb einen umfangreichen Abschnitt comparing straight.el to other package managers.

+0

"es ist sehr peinlich, package.el zu laden, um ein lokales Paket zu laden, das Sie selbst geschrieben haben" ... ähm, nein, ist es nicht; Tatsächlich ist es unglaublich einfach: 'Mx package-install-file' – phils

+0

@phils Dann müssen Sie diesen Befehl jedes Mal erneut ausführen, wenn Sie eine Änderung an der Datei vornehmen, und außerdem müssen Sie bei der Verwendung von' Mx find- Funktion 'und Freunde, um sicherzustellen, dass Sie die echte Datei bearbeiten, und nicht die Kopie, die 'package.el' erstellt. Ich nenne das nicht einfach. –

Verwandte Themen