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 spotifycapa funcione, pero la masterrama actual del helm-spotifypaquete 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-spotifypara cargar.
Lo que intenté fue cambiar a la developrama 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-spotifyrepositorio 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.elhay:
(require 'multi)
Entonces, supongo que cuando se instala helm-spotifydesde melpala dependencia multise resuelve antes de cargar, helm-spotifypero, 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 multia dotspacemacs-additional-packagesy 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 multia dotspacemacs-additional-packages.
fuente

package.el(el módulo Emacs incorporado) realmente no se velocal/helm-spotifycomo 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-packagesyspotify-packagesal mismo tiempo, o si los probó por separado. Tenermultienspotify-packagesy unaspotify/init-multifunción enpackages.el(sin usaradditional-packages) debe ser lo suficientementerecipelugar delocal. Por ejemplo(helm-spotify :location (recipe <recipe specs>))multiadotspacemacs-additional-packagessin éxito. El error es el mismo. Actualicé mi pregunta para reflejar lopackages.elque estoy usando. ¡Gracias por tu esfuerzo!recipelugar delocal(debería encargarse de la dependencia múltiple para ti) o mover lamulticonfiguración a una capa separada y asegurarte de que esa capa aparece antesspotifyendotspacemacs-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-spotifyen 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
quelpapara buscar repositorios de GitHub basados en recetas MELPA,package.else utiliza para instalar los paquetes para que las dependencias se resuelvan correctamente.Tenga en cuenta que:
helm-spotifycarpeta en el˜/.emacs.d/elpadirectorio y reiniciar Emacs.spotifycapa a sudotspacemacs-configuration-layersvariable.fuente
:branch "my-branch".emacs.d/private/localdirectorio y agregue ese directorio a la variable de ruta de carga agregando(some-package :location local)a la listadotspacemacs-additional-packagesdentro de ladotspacemacs/layersfunció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-configfunción de su archivo dotspacemacs. - de spacemacs doc