Ich bin auf einen Fehler gestoßen, der eine Interaktion zwischen mehreren Paketen beinhaltete. Um den Fehler zu melden, muss ich ein reproduzierbares Rezept bereitstellen, das das Problem veranschaulicht. Dies erfordert das Laden der entsprechenden Pakete, aber nichts anderes von meinem init und keine anderen Pakete. Wie geht das am besten?
AKTUALISIEREN
Zur Verdeutlichung bin ich mit dem Konzept vertraut, meine .emacs bei einer binären Suche zu durchsuchen, um den Code zu identifizieren, der ein Problem verursacht. In dieser Situation weiß ich genau, welche Pakete das Problem bereits verursachen. Was ich nicht weiß, ist, wie man das package-
System benutzt, um nur diese wenigen Pakete zu laden.
(package-initialize)
werde die pakete laden, aber auch alles andere in meinem verzeichnis .emacs.d/elpa
. package-load-list
Hiermit kann ich bestimmte Versionen von Paketen angeben, die geladen werden sollen, oder bestimmte Pakete, die explizit ausgeschlossen werden sollen . Ich brauche das Gegenteil - wie Emacs mit einer Liste von Paketen zu liefern zu schließen , ohne im elpa / Paketsystems alle anderen Pakete geladen werden .
quelle
.emacs
Datei aus beginnen. Installieren Sie jedes Paket einzeln und prüfen Sie, ob das Problem weiterhin besteht. Sie können sich selbst überraschen und feststellen, dass das verantwortliche Paket nicht gut mit dem anderen Paket zusammenarbeitet. Wenn Sie so weit wie möglich weg, schreibt die Stufen , dass Sie das Problem zu reproduzieren , verwendet und den Fehlerbericht - zum Beispiel ausgehend von Emacs -Q , Paket A installiert, dann Paket B installieren, dann Paket C installieren, dann öffne den*Scratch*
Puffer undcomment-region
(oder mitC-u
einem Kommentar auskommentieren).package-load-list
ist eine Möglichkeit, Pakete explizit einzuschließen. Entfernen Sie einfach dasall
Symbol.Antworten:
Das
package-load-list
Variablen kann genau angegeben werden, welche Pakete und Versionen geladen werden sollen:Das Einzige, worauf Sie achten müssen, ist, dass der Standardwert Folgendes enthält
all
. Wenn Siesetq
dies tun, ist dies in Ordnung, da der ursprüngliche Wert dadurch vollständig überschrieben wird.quelle
Eine gute Option, wenn die Entwickler, die an der Reproduktion des Fehlers arbeiten, diese Abhängigkeiten möglicherweise noch nicht installiert haben (oder möchten), ist die Verwendung des
try
Pakets ( https://melpa.org/#/try ). Andere können Pakete aus der Paketverwaltung laden, ohne ihre lokale Installation zu ändern.quelle
Dieser Anwendungsfall ist ein schrecklicher Mangel von
package.el
, also nicht verwendenpackage.el
. Verwenden Sie stattdessen einen Paketmanager wiestraight.el
(Ich bin der Autor), der speziell für diesen Anwendungsfall entwickelt wurde.Ausführliche Dokumentation
straight.el
, einschließlich Vergleiche mit anderen Paketmanagern, finden Sie in der README . Im Folgenden habe ich den Abschnitt zitiert, der für Ihre Frage relevant ist.Verwenden
straight.el
, um Fehler zu reproduzierenEiner der Hauptgründe, warum ich schreiben wollte,
straight.el
war, dass vorhandene Paketmanager die Fehler nicht reproduzieren konnten. Beispielsweise würden einige von ihnen alle installierten Pakete laden, wenn der Paketmanager initialisiert wurde! Offensichtlich ist das für einen "minimalen Testfall" nicht akzeptabel.Im Gegenteil, das Bootstrapping
straight.el
lädt nichts außer sichstraight.el
selbst (die Standard-Rezept-Repositorys werden registriert, aber erst bei Bedarf geklont). Normalerweise sollten Siestraight.el
mit dem Bootstrap-Snippet laden. Wenn Sie sich jedoch in diesem befindenemacs -Q
, können Sie Folgendes initialisierenstraight.el
:Sie können dies auch über die Befehlszeile tun, indem Sie möglicherweise einen Alias dafür erstellen:
Angenommen, Sie erstellen einen Fehlerbericht für Projectile. Führen Sie Folgendes aus, um nur Projectile und alle zugehörigen Abhängigkeiten zu laden:
Beachten Sie, dass dabei die aktuell ausgecheckten Versionen von Projectile und alle zugehörigen Abhängigkeiten verwendet werden. Beachten Sie diese, um einen Fehlerbericht zu erstellen.
quelle
Wenn Sie es für eine einmalige Aktion benötigen (z. B. um ein Rezept zu testen, um einen Fehler zu reproduzieren), können Sie häufig davonkommen mit:
Ich habe "oft" gesagt, weil es Abhängigkeiten nicht berücksichtigt. In einigen Fällen müssen Sie daher mehr dieser
-l ...
Argumente hinzufügen , um die anderen benötigten Pakete zu laden.quelle