Ich möchte ein elisp-Paket verteilen, das json.el verwendet ( http://edward.oconnor.cx/2006/03/json.el ). Ich brauche dies, um für Versionen von Emacs zu funktionieren, auf denen json nicht vorinstalliert ist (z. B. OSX, das mit Emacs 22.1 geliefert wird). Gibt es eine empfohlene Möglichkeit für mich, ein Paket eines Drittanbieters wie json mit meinem Paket zu versenden?
Ich werde dies in Quellform direkt an Kunden verteilen.
locate-library
- oder einfach wirkt auf(require 'json nil :noerror)
Fehler - zu prüfen , objson
bereits vorhanden ist , und wenn nicht, das Unterverzeichnis für Ihre eigene Kopie addieren ,load-path
bevorrequire
es ing.json.el
mit Ihrer Bibliothek versenden? Fügen Sie einfach(require 'json)
einen Hinweis in den Kommentar ein und fügen Sie ihn hinzu (Dateikopfkommentare), der den Benutzern mitteilt, wo sie ihn erhalten könnenjson.el
. Das ist höflich, ausreichend und für die Benutzer einfach. Wenn Ihre Bibliothek nicht wirklich benötigtjson.el
wird und nur eine nette Sache ist oder nur für einige Funktionen (nicht alle) benötigt wird, verwenden(require 'json nil t)
Sie in Ihrem Code Bedingungen, die auf ihre Anwesenheit prüfen (z . B.featurep
oderfboundp
oderboundp
) , und fügen Sie sie hinzu . Sie können auch(require 'json nil t)
in einer bestimmten Funktionsdefinition verwenden.Antworten:
Wie andere bereits betont haben, haben Sie kein "Paket", sondern nur eine Bibliothek, wenn Sie auf Emacs 23 oder sogar 22 abzielen. "Pakete" sind in Emacs vor Emacs 24 nicht vorhanden, als der Paketmanager hinzugefügt wurde.
Bündelung mit einer Bibliothek
Bündeln Sie es.
Da es keine Standardmethode gibt, um Bibliotheken vor Paketen zu installieren, können Sie json.el in alles bündeln, was Sie Ihren Benutzern geben - eine Art Archiv, nehme ich an. Sie müssen es ohnehin manuell installieren und können so die benötigten Dateien auswählen: Nur Ihre Bibliothek für Emacs 24/25 Benutzer, Ihre Bibliothek + json.el für Benutzer mit älteren Versionen.
Solange Sie dies dokumentieren, wird es keine Probleme verursachen.
Mit einem Paket bündeln
Bündeln Sie es auf keinen Fall.
Wenn Sie jedoch ein geeignetes Paket für Emacs 24 und höher erstellen, dürfen
json.el
Sie es nicht einschließen .Der Paketmanager installiert Ihre mitgelieferte Kopie gerne
json.el
zusammen mit Ihrer eigentlichen Bibliothek. Da Pakete inload-path
Ihrer mitgelieferten Kopie von zuerst an erster Stellejson.el
stehen, überschreiben sie jetzt die integrierte, was bei Paketen, die eine neuere Version von erwarten, allerlei Probleme verursachtjson.el
.Der Weg zu gehen (meiner Meinung nach)
Erstellen Sie zwei Distributionen Ihres Pakets:
json.el
, jedoch ohne Paketmetadaten für Benutzer älterer Emacs-Versionen.Das einzige, worauf Sie achten müssen, ist, wenn Benutzer älterer Emacs-Versionen auf Emacs 24 aktualisieren. In diesem Fall müssen sie die vorherige Installation Ihrer Bibliothek zusammen mit
json.el
dem richtigen Emacs 24-Paket manuell entfernen und erneut installieren.Eine Alternative
Wenn Sie nicht zwei verschiedene Distributionen pflegen möchten, können Sie diese bündeln
json.el
, jedoch unter einem anderen Namen, zmy-library-json-compat.el
. Mit einem anderen Namenjson.el
überschreibt Ihre Bundle-Kopie niemals die integrierte.Da die Funktionen und Symbole in der gebündelten Kopie immer noch mit der integrierten Kopie in Konflikt stehen, müssen Sie darauf achten, dass Sie Ihre gebündelte Kopie nicht laden, wenn die reale
json.el
Version verfügbar ist. Dies ist jedoch einfach:Emacs versucht zu laden
json.el
, andernfalls wird auf Ihre gebündelte Kopie unter einem anderen Namen zurückgegriffen.Der wahre Weg (meiner Meinung nach)
Bitten Sie Ihre Benutzer, auf Emacs 24 zu aktualisieren. Die letzte Version von Emacs 22 ist vor acht (!) Jahren, die letzte Version von Emacs 23 noch vor vier Jahren. Beide Versionen sind veraltet und verfügen nicht über viele Funktionen. Viele Pakete (z. B. Magit) unterstützen heutzutage nur noch Emacs 24. Emacs 22/23 sind eine Sackgasse und es gibt keinen Weg nach vorne.
Das Aktualisieren auf Emacs 24 ist einfach genug: Die meisten modernen Linux-Distributionen enthalten mindestens Emacs 24.1 in ihren Paket-Repositorys. Für OS X sind vorgefertigte App-Bundles verfügbar, und der neueste stabile Emacs 24 ist im beliebten OS X-Paketmanager Homebrew enthalten.
quelle