Dies ähnelt dieser Frage, aber die Antwort dort scheint veraltet zu sein.
Angenommen, ich verwende eine Ebene und möchte den Code eines bestimmten Pakets hacken, das diese Ebene verwendet. Wie gehe ich vor?
Um besser zu veranschaulichen, was ich im Allgemeinen erreichen möchte, präsentiere ich ein konkretes Beispiel.
Ich versuche, die spotify
Ebene zum Laufen zu bringen , aber der aktuelle master
Zweig im helm-spotify
Paket verwendet eine veraltete Web-API. Es gibt eine Pull-Anfrage , um dies zu beheben, und ich möchte es versuchen und vielleicht etwas beitragen. Mein Problem ist, dass ich die lokale Kopie nicht helm-spotify
zum Laden bekommen kann.
Ich habe versucht, in den develop
Zweig von spacemacs
:
git branch --track develop origin/develop
git checkout develop
Im ~/.emacs.d/layers/spotify/packages.el
Ich habe mich verändert von
(setq spotify-packages '(spotify helm-spotify))
Zu
(setq spotify-packages
'(
spotify
(helm-spotify :location local)
))
Und zog das helm-spotify
Repository zu~/.emacs.d/layers/spotify/local/helm-spotify
Wenn ich Spacemacs neu starte, bekomme ich
File error: Cannot open load file, no such file or directory, multi
Wenn ich hineinschaue, helm-spotify.el
gibt es:
(require 'multi)
Meine Vermutung ist also, dass bei der Installation helm-spotify
aus melpa
der Abhängigkeit von multi
vor dem Laden aufgelöst wird, helm-spotify
aber natürlich nicht mehr, wenn ich eine lokale Kopie von verwende helm-spotify
.
Meine Fragen sind also :
- Wie können Abhängigkeiten bei Verwendung eines lokalen Pakets aufgelöst werden?
- Oder sollte ich das ganz anders machen als ich es beschrieben habe?
Ich habe auch versucht, ohne Erfolg, hinzufügen multi
zu dotspacemacs-additional-packages
und zu spotify-packages
:
(setq spotify-packages '(
multi ;; I added this
spotify
(helm-spotify :location local) ;; I modified here
))
;; I added this
(defun spotify/init-multi ()
(use-package multi))
;; the rest is as it was
(defun spotify/init-spotify ()
(use-package spotify
:config (spacemacs/set-leader-keys
"amsp" 'spotify-playpause
"amsn" 'spotify-next
"amsN" 'spotify-previous
"amsQ" 'spotify-quit)))
(when (configuration-layer/layer-usedp 'spacemacs-helm)
(defun spotify/init-helm-spotify ()
(use-package helm-spotify
:config (spacemacs/set-leader-keys
"amsg" 'helm-spotify))))
in packages.el
. Auch versucht ohne Zugabe multi
zu dotspacemacs-additional-packages
.
quelle
package.el
(das integrierte Emacs-Modul) nicht wirklichlocal/helm-spotify
als Paket angezeigt wird. Die Lösung erfolgt manuell, und Sie befinden sich in der richtigen Richtung. Können Sie näher erläutern, wie Sie versucht haben, etwas hinzuzufügenmulti
? Es ist nicht klar, ob Sie es zuadditional-packages
undspotify-packages
gleichzeitig hinzugefügt oder separat ausprobiert haben. Nachdemmulti
inspotify-packages
und einespotify/init-multi
Funktion inpackages.el
(ohne Verwendungadditional-packages
) sollte ausreichenrecipe
stattdessen anstelle von verwendenlocal
. zB(helm-spotify :location (recipe <recipe specs>))
multi
,dotspacemacs-additional-packages
ohne Erfolg. Der Fehler ist der gleiche. Ich habe meine Frage aktualisiert, um die vonpackages.el
mir verwendete Frage wiederzugeben . Danke für deinen Einsatz!recipe
anstelle von zu verwendenlocal
(es sollte die Mehrfachabhängigkeit für Sie berücksichtigen), oder diemulti
Konfiguration auf eine separate Ebene verschieben und diese Ebene sicherstellen ist zuvorspotify
indotspacemacs-configuration-layers
(derAntworten:
Erstens sollten Sie den Code in der Hauptverzweigung niemals ändern. Spacemacs ist so konzipiert, dass es hackbar ist, während die Hauptverzweigung schreibgeschützt bleibt. Außerdem kann es nicht zu Force-Pushs in der Hauptverzweigung kommen! Wenn Sie den Code wirklich ändern möchten, sollten Sie den Entwicklungszweig verwenden und ihn manuell auf dem neuesten Stand halten. Entwicklungszweig wird niemals erzwungen.
EDIT: Eigentlich haben Sie den Entwicklungszweig verwendet, ich entschuldige mich, ich lasse den Absatz als Referenz.
Jetzt die Antwort :-) Der richtige Weg, um das zu tun, was Sie wollen, besteht darin, den Ort in zu überschreiben
dotspacemacs-additional-packages
. Ich habe es einfach versucht, indem ichhelm-spotify
meinen Namespace eingegeben und dann hinzugefügt habe:Dann holte Spacemacs beim Neustart das Paket korrekt von meiner Gabel, anstatt MELPA zu erreichen. Spacemacs verwendet
quelpa
zum Abrufen von Repositorys von GitHub basierend auf MELPA-Rezepten undpackage.el
wird zum Installieren der Pakete verwendet, damit Abhängigkeiten korrekt aufgelöst werden.Beachten Sie, dass:
helm-spotify
Ordner im˜/.emacs.d/elpa
Verzeichnis manuell löschen und Emacs neu starten.spotify
Ebene noch zu Ihrerdotspacemacs-configuration-layers
Variablen hinzufügen .quelle
:branch "my-branch"
.emacs.d/private/local
Verzeichnis erstellen und dieses Verzeichnis zur Ladepfadvariablen hinzufügen(some-package :location local)
, indem Sie esdotspacemacs-additional-packages
innerhalb derdotspacemacs/layers
Funktion Ihrer dotspacemacs-Datei zur Liste hinzufügen. Nachdem Sie Ihre Paketdatei in dieses Paketverzeichnis gestellt haben, kann die Datei geladen werden, ohne dass der vollständige Pfad erforderlich ist, indem Sie eine(require 'package-name)
in den Hauptteil derdotspacemacs/user-config
Funktion Ihrer dotspacemacs-Datei einfügen. - von spacemacs doc