Isso é semelhante a essa pergunta, mas a resposta parece estar obsoleta.
Digamos que estou usando uma camada e queira hackear o código de um pacote específico que a camada está usando. Como proceder?
Para ilustrar melhor o que quero realizar em geral, apresento um exemplo específico.
Eu tento fazer com que a spotify
camada funcione, mas a master
ramificação atual no helm-spotify
pacote usa uma API da web obsoleta. Há uma solicitação de recebimento para corrigir isso e quero experimentá-lo e talvez contribuir com algo. Meu problema é que não consigo helm-spotify
carregar a cópia local do .
O que eu tentei foi mudar para o develop
ramo de spacemacs
:
git branch --track develop origin/develop
git checkout develop
No ~/.emacs.d/layers/spotify/packages.el
Eu mudei de
(setq spotify-packages '(spotify helm-spotify))
Para
(setq spotify-packages
'(
spotify
(helm-spotify :location local)
))
E puxou o helm-spotify
repositório para~/.emacs.d/layers/spotify/local/helm-spotify
Quando reinicio o spacemacs, recebo
File error: Cannot open load file, no such file or directory, multi
Quando eu olho, helm-spotify.el
há:
(require 'multi)
Então, meu palpite é que, ao instalar a helm-spotify
partir melpa
da dependência, o problema multi
é resolvido antes do carregamento, helm-spotify
mas é claro que não quando mais uso uma cópia local do helm-spotify
.
Então, minhas perguntas são :
- Como resolver dependências ao usar um pacote local?
- Ou devo fazer isso completamente diferente do que descrevi?
Eu também tentou, sem sucesso, para adicionar multi
a dotspacemacs-additional-packages
e 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))))
no packages.el
. Também tentei sem adicionar multi
a dotspacemacs-additional-packages
.
fonte
package.el
(o módulo Emacs embutido) não é realmente vistolocal/helm-spotify
como um pacote. A maneira de resolvê-lo é manualmente, e você está na direção certa. Você pode adicionar mais detalhes de como tentou adicionarmulti
? Não está claro se você o adicionouadditional-packages
espotify-packages
ao mesmo tempo ou se os tentou separadamente. Tendomulti
emspotify-packages
e umaspotify/init-multi
função empackages.el
(sem usaradditional-packages
) deve ser suficienterecipe
vez delocal
. por exemplo(helm-spotify :location (recipe <recipe specs>))
multi
adotspacemacs-additional-packages
sem sucesso. O erro é o mesmo. Atualizei minha pergunta para refletir opackages.el
que estou usando. Obrigado pelo seu esforço!recipe
vez delocal
(isso deve cuidar da multi-dependência para você) ou mover amulti
configuração para uma camada separada e garantir que essa camada está listado antesspotify
emdotspacemacs-configuration-layers
(a lista camada)Respostas:
Primeiro, você nunca deve modificar o código na ramificação principal, o Spacemacs foi projetado para ser hackável enquanto mantém a ramificação principal somente leitura, também para que não ocorram impulsos de força na ramificação principal !. Se você realmente deseja modificar o código, use a ramificação de desenvolvimento e mantenha-a atualizada manualmente. A ramificação de desenvolvimento nunca é forçada.
EDIT: na verdade você estava usando o ramo de desenvolvimento, minhas desculpas, deixei o parágrafo como referência.
Agora a resposta :-) A maneira correta de fazer o que você deseja é substituir o local
dotspacemacs-additional-packages
. Eu apenas tentei bifurcandohelm-spotify
no meu espaço para nome e adicionei:Em seguida, ao reiniciar, o Spacemacs buscou o pacote do meu garfo corretamente, em vez de alcançar o MELPA. O Spacemacs usa
quelpa
para buscar repositórios do GitHub com base nas receitas MELPA,package.el
é usado para instalar os pacotes para que as dependências sejam resolvidas corretamente.Observe que:
helm-spotify
pasta no˜/.emacs.d/elpa
diretório e reiniciar o Emacs.spotify
camada à suadotspacemacs-configuration-layers
variável.fonte
:branch "my-branch"
.emacs.d/private/local
diretório e inclua esse diretório na variável de caminho de carregamento adicionando(some-package :location local)
à listadotspacemacs-additional-packages
nadotspacemacs/layers
função do seu arquivo dotspacemacs. Após colocar seu arquivo de pacote nesse diretório de pacotes, o arquivo pode ser carregado, sem exigir o caminho completo, colocando um(require 'package-name)
dentro do corpo dadotspacemacs/user-config
função do seu arquivo dotspacemacs. - from spacemacs doc