Esto es similar a esta pregunta, pero la respuesta allí parece estar en desuso.
Digamos que estoy usando una capa y quiero hackear el código de un paquete en particular que está usando esa capa. ¿Cómo lo hago?
Para ilustrar mejor lo que quiero lograr en general, presento un ejemplo específico.
Intento que la spotify
capa funcione, pero la master
rama actual del helm-spotify
paquete usa una API web en desuso. Hay una solicitud de extracción para solucionar esto y quiero probarlo y tal vez contribuir con algo. Mi problema es que no puedo obtener la copia local helm-spotify
para cargar.
Lo que intenté fue cambiar a la develop
rama de spacemacs
:
git branch --track develop origin/develop
git checkout develop
En ~/.emacs.d/layers/spotify/packages.el
Cambié de
(setq spotify-packages '(spotify helm-spotify))
A
(setq spotify-packages
'(
spotify
(helm-spotify :location local)
))
Y sacó el helm-spotify
repositorio a~/.emacs.d/layers/spotify/local/helm-spotify
Cuando reinicio los spacemacs me sale
File error: Cannot open load file, no such file or directory, multi
En cuando miro helm-spotify.el
hay:
(require 'multi)
Entonces, supongo que cuando se instala helm-spotify
desde melpa
la dependencia multi
se resuelve antes de cargar, helm-spotify
pero, por supuesto, ya no cuando uso una copia local de helm-spotify
.
Entonces mis preguntas son :
- ¿Cómo se resuelven las dependencias cuando se usa un paquete local?
- ¿O debería hacer esto completamente diferente de lo que describí?
También intenté, sin éxito, para agregar multi
a dotspacemacs-additional-packages
y para 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))))
en packages.el
. También intentado sin agregar multi
a dotspacemacs-additional-packages
.
fuente
package.el
(el módulo Emacs incorporado) realmente no se velocal/helm-spotify
como un paquete. La forma de resolverlo es manualmente, y está en la dirección correcta. ¿Puedes agregar más detalles sobre cómo intentaste agregarmulti
? No está claro si lo agregóadditional-packages
yspotify-packages
al mismo tiempo, o si los probó por separado. Tenermulti
enspotify-packages
y unaspotify/init-multi
función enpackages.el
(sin usaradditional-packages
) debe ser lo suficientementerecipe
lugar delocal
. Por ejemplo(helm-spotify :location (recipe <recipe specs>))
multi
adotspacemacs-additional-packages
sin éxito. El error es el mismo. Actualicé mi pregunta para reflejar lopackages.el
que estoy usando. ¡Gracias por tu esfuerzo!recipe
lugar delocal
(debería encargarse de la dependencia múltiple para ti) o mover lamulti
configuración a una capa separada y asegurarte de que esa capa aparece antesspotify
endotspacemacs-configuration-layers
(la lista de capas)Respuestas:
En primer lugar, nunca debe modificar el código en la rama maestra, Spacemacs está diseñado para ser pirateable mientras se mantiene la rama maestra de solo lectura, ¡y no es posible que se produzcan empujes forzados a la rama maestra! Si realmente desea modificar el código, debe usar la rama de desarrollo y mantenerlo actualizado manualmente. Desarrollar rama nunca es forzado empuje.
EDITAR: en realidad estabas usando la rama de desarrollo, mis disculpas, dejé el párrafo como referencia.
Ahora la respuesta :-) La forma correcta de hacer lo que quiere es sobrescribir la ubicación
dotspacemacs-additional-packages
. Simplemente lo intenté bifurcandohelm-spotify
en mi espacio de nombres y luego agregué:Luego, al reiniciar, Spacemacs tomó el paquete de mi bifurcación correctamente en lugar de llegar a MELPA. Spacemacs utiliza
quelpa
para buscar repositorios de GitHub basados en recetas MELPA,package.el
se utiliza para instalar los paquetes para que las dependencias se resuelvan correctamente.Tenga en cuenta que:
helm-spotify
carpeta en el˜/.emacs.d/elpa
directorio y reiniciar Emacs.spotify
capa a sudotspacemacs-configuration-layers
variable.fuente
:branch "my-branch"
.emacs.d/private/local
directorio y agregue ese directorio a la variable de ruta de carga agregando(some-package :location local)
a la listadotspacemacs-additional-packages
dentro de ladotspacemacs/layers
función de su archivo dotspacemacs. Después de colocar su archivo de paquete en este directorio de paquetes, el archivo se puede cargar, sin requerir la ruta completa, colocando(require 'package-name)
dentro del cuerpo de ladotspacemacs/user-config
función de su archivo dotspacemacs. - de spacemacs doc