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ürfenjson.el
Sie es nicht einschließen .
Der Paketmanager installiert Ihre mitgelieferte Kopie gerne json.el
zusammen mit Ihrer eigentlichen Bibliothek. Da Pakete in load-path
Ihrer mitgelieferten Kopie von zuerst an erster Stelle json.el
stehen, überschreiben sie jetzt die integrierte, was bei Paketen, die eine neuere Version von erwarten, allerlei Probleme verursacht json.el
.
Der Weg zu gehen (meiner Meinung nach)
Erstellen Sie zwei Distributionen Ihres Pakets:
- Ein geeignetes Emacs-Paket für Emacs 24 und höher, z. B. eine TAR mit den entsprechenden Paketmetadaten. Sie können sogar ein kleines Paket-Repository mit Ihrem Paket hosten, um Updates automatisch an Emacs 24-Benutzer zu verteilen.
- Eine TAR-Datei mit Ihrer Bibliothek und
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, z my-library-json-compat.el
. Mit einem anderen Namen json.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:
(unless (require 'json nil 'no-error)
(require 'json "my-library-json-compat"))
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.