Manuelles Installieren eines Multifile-Pakets in "elpa /"

7

Wenn ich ein neues Paket schreibe, ist es großartig, dass ich seine Installation testen kann, indem ich es einfach ausstelle M-x package-install-from-buffer. Dadurch wird das Paket mit installiert package.el, so dass es untergeht "~/.emacs.d/elpa". Dies funktioniert jedoch nicht bei Paketen mit mehreren Dateien.

Wie werden alle .elDateien im aktuellen Verzeichnis als einzelnes Multifile-Paket installiert ?

Malabarba
quelle

Antworten:

7

Emacs 25.1 hat jetzt diese Funktion . Aus der NEWSDatei:

** package-install-from-bufferund package-install-filearbeite an Verzeichnissen. Dies folgt den gleichen Regeln wie die Installation aus einer .tarDatei, außer dass die -pkg.elDatei optional ist.

Es sind keine neuen Befehle zu merken. package-install-from-bufferGeben Sie einfach aus einem dired Puffer aus oder rufen Sie package-install-fileein Verzeichnis auf und geben Sie es an. Welches Paket auch immer in diesem Verzeichnis enthalten ist, es wird gelesen und installiert, sei es einzeln oder in mehreren -pkg.elDateien , es ist keine Tarierung oder Datei erforderlich.

Malabarba
quelle
Optionale -pkg.elDatei ist interessant. Was sind die Standardwerte in diesem Fall?
Phils
@phils findet genau wie die Paket-Repositorys eine elisp-Datei mit einem vollständigen Paket-Header und generiert daraus die -pkg-Datei.
Malabarba
1
Ah, ich hatte nicht bemerkt, dass sie so normal erzeugt wurden. Ihre Änderungen sind also absolut sinnvoll. Gute Arbeit.
Phils
Malabarba: Ich stelle fest, dass die aktuelle Dokumentzeichenfolge in trunk for package-install-filenicht erwähnt, dass sie für Verzeichnisse funktioniert (obwohl dies, wie Sie gesagt haben, der Fall ist).
Phils
@phils Danke, dass du es bemerkt hast. Ich repariere es jetzt.
Malabarba
1

package-install-from-buffer sagt:

Es wird angenommen, dass der aktuelle Puffer eine einzelne .el- oder .tar-Datei ist , die den Verpackungsrichtlinien entspricht

Man kann also davon ausgehen, dass Sie das Verzeichnis archivieren können (vorausgesetzt, es erfüllt die Kriterien), die TAR-Datei in Emacs laden und package-install-from-bufferwie zuvor verwenden können?

Edit: Oder, wie lunaryorn Punkte aus, nicht besuchen Sie das Archiv in Emacs und Verwendung package-install-file.

Phils
quelle
1
Klingt nach einer Funktion, um das aktuelle Verzeichnis (neu) zu tarieren und dann die Paketinstallation durchzuführen, wäre praktisch.
Glucas
1
Alternativ M-x package-install-file.
Funktioniert nicht Es versucht, eine paradox/paradox-pkg.elDatei in der zu finden tar, und Fehler, wenn dies nicht der Fall ist. Gleiches für beide install-fileund install-from-buffer. Ich schätze, ich muss diese -pkgDatei als eine Art Rezept erstellen .
Malabarba
1
@Malabarba Ein TAR-Paket muss eine -pkgDatei enthalten, andernfalls ist es kein gültiges Paket. Es funktioniert also nicht, nur ein zufälliges Verzeichnis zu tarieren. Emacs muss doch einen Platz haben, um nach den Paketmetadaten zu suchen. Sie können MELPAs verwenden package-buildoder caskaus einem Verzeichnisbaum geeignete TAR-Pakete erstellen.
Malabarba: Siehe C-h i g (elisp) Multi-file Packagesfür Details.
Phils
1

package.elhat keine gute Unterstützung für diesen Anwendungsfall. Sie müssen package-install-from-bufferjedes Mal neu ausführen, wenn Sie ein Update für das Paket vornehmen. Außerdem M-x find-functionspringen Freunde nicht zum Quellcode, sondern zu der Kopie, die sie package.eleinfügt ~/.emacs.d/elpa. Infolgedessen würde ich empfehlen, nicht package.elfür diesen Anwendungsfall zu verwenden (oder überhaupt nicht, da es eine Reihe anderer Probleme gibt).

Stattdessen können Sie meinen Paketmanager ausprobieren straight.el, der explizit für diesen Anwendungsfall entwickelt wurde. Mit straight.elgibt es keine "lokale Installation". Sie legen einfach Ihr Repository ab ~/.emacs.d/straight/repos/<my-package-repo>und laden das Paket in Ihre Init-Datei:

(straight-use-package '(<my-package> :local-repo "<my-package-repo>"))

Jedes Mal, wenn Sie eine Änderung am Quellcode vornehmen, wird die automatische Ladegenerierung und Bytekompilierung wiederholt (sobald Sie Emacs neu starten). Außerdem werden Sie direkt aus dem Git-Repository ausgeführt, sodass M-x find-functionFreunde wie erwartet arbeiten.

Schließlich sind lokale und vorgelagerte Versionen vollständig austauschbar. straight.elMit dieser Option können Sie lokale Änderungen vornehmen, die Sie möchten, und sie werden genauso heilig behandelt wie Upstream-Änderungen (obwohl straight.elSie Ihre Repositorys auf Wunsch automatisch [und interaktiv] auf ihre Upstream-Versionen zurücksetzen können). Daher müssen Sie keine Änderungen an Ihrer Konfiguration vornehmen, wenn Sie eine lokale Entwicklung durchführen möchten: Führen Sie einfach eine lokale Entwicklung durch. Und wenn Sie ein privates Paket haben, das Sie veröffentlichen, ist es trivial: Schieben Sie dieses Paket einfach irgendwohin (und aktualisieren Sie wahrscheinlich das Rezept in Ihrer Init-Datei, um auf dieses Git-Repository zu verweisen, damit straight.eles von einem anderen Computer neu geklont werden kann).

Anders als bei package.elgibt es keinen Unterschied bei der Behandlung von Paketen mit mehreren Dateien und einzelnen Dateien.

Eine ausführliche Dokumentation zu straight.el, einschließlich Vergleiche mit anderen Paketmanagern, finden Sie in der README-Datei .

Radon Rosborough
quelle