Ini mirip dengan pertanyaan ini tetapi jawaban di sana tampaknya sudah usang.
Katakanlah saya menggunakan layer dan ingin meretas kode dari paket tertentu yang digunakan layer. Bagaimana saya melakukannya?
Untuk menggambarkan dengan lebih baik apa yang ingin saya capai secara umum, saya berikan contoh spesifik.
Saya mencoba untuk mendapatkan spotify
lapisan untuk bekerja, tetapi master
cabang saat ini dalam helm-spotify
paket menggunakan API web yang sudah usang. Ada permintaan tarik untuk memperbaikinya dan saya ingin mencobanya dan mungkin berkontribusi sesuatu. Masalah saya adalah, saya tidak bisa mendapatkan salinan lokal helm-spotify
untuk memuat.
Apa yang saya coba adalah beralih ke develop
cabang spacemacs
:
git branch --track develop origin/develop
git checkout develop
Di ~/.emacs.d/layers/spotify/packages.el
Saya berubah dari
(setq spotify-packages '(spotify helm-spotify))
Untuk
(setq spotify-packages
'(
spotify
(helm-spotify :location local)
))
Dan menarik helm-spotify
repositori ke~/.emacs.d/layers/spotify/local/helm-spotify
Ketika saya me-restart spacemacs saya dapatkan
File error: Cannot open load file, no such file or directory, multi
Ketika saya melihat helm-spotify.el
ada:
(require 'multi)
Jadi dugaan saya adalah, bahwa ketika menginstal helm-spotify
dari melpa
dependensi multi
akan diselesaikan sebelum memuat helm-spotify
tetapi tentu saja tidak lagi ketika saya menggunakan salinan lokal helm-spotify
.
Jadi pertanyaan saya adalah :
- Bagaimana mengatasi dependensi saat menggunakan paket lokal?
- Atau haruskah saya melakukan ini sama sekali berbeda dari apa yang saya jelaskan?
Saya juga mencoba, tidak berhasil, untuk menambahkan multi
ke dotspacemacs-additional-packages
dan 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))))
di packages.el
. Juga mencoba tanpa menambahkan multi
ke dotspacemacs-additional-packages
.
sumber
package.el
(modul Emacs bawaan) tidak benar-benar melihatlocal/helm-spotify
sebagai sebuah paket. Cara mengatasinya secara manual, dan Anda berada di arah yang benar. Bisakah Anda menambahkan lebih detail bagaimana Anda mencoba menambahkanmulti
? Tidak jelas apakah Anda menambahkannya keadditional-packages
danspotify-packages
pada saat yang sama, atau mencobanya secara terpisah. Memilikimulti
dispotify-packages
danspotify/init-multi
fungsi dalampackages.el
(tanpa menggunakanadditional-packages
) harus cukuprecipe
bukanlocal
. misalnya(helm-spotify :location (recipe <recipe specs>))
multi
untukdotspacemacs-additional-packages
tanpa keberhasilan. Kesalahannya sama. Saya memperbarui pertanyaan saya untuk mencerminkanpackages.el
saya menggunakan. Terima kasih atas usaha Anda!recipe
daripadalocal
(itu harus mengurus multi-dependensi untuk Anda), atau memindahkanmulti
konfigurasi ke lapisan yang terpisah dan memastikan lapisan itu terdaftar sebelumnyaspotify
dalamdotspacemacs-configuration-layers
(daftar lapisan)Jawaban:
Pertama, Anda tidak boleh memodifikasi kode di cabang master, Spacemacs dirancang agar dapat diretas sambil menjaga cabang master hanya-baca, juga bukan karena dorongan yang mendorong ke cabang master mungkin terjadi !. Jika Anda benar-benar ingin memodifikasi kode, Anda harus menggunakan cabang pengembangan dan tetap memperbaruinya secara manual. Mengembangkan cabang tidak pernah dipaksa mendorong.
EDIT: sebenarnya Anda menggunakan cabang pengembangan, permintaan maaf saya, saya membiarkan paragraf untuk referensi.
Sekarang jawabannya :-) Cara yang benar untuk melakukan apa yang Anda inginkan adalah menimpa lokasi di
dotspacemacs-additional-packages
. Saya baru saja mencobanya dengan forkinghelm-spotify
di namespace saya dan kemudian menambahkan:Kemudian setelah restart Spacemacs mengambil paket dari fork saya dengan benar alih-alih mencapai MELPA. Spacemacs digunakan
quelpa
untuk mengambil repositori dari GitHub berdasarkan resep MELPA,package.el
digunakan untuk menginstal paket sehingga dependensi diselesaikan dengan benar.Perhatikan bahwa:
helm-spotify
folder dalam˜/.emacs.d/elpa
direktori dan me-restart Emacs.spotify
layer kedotspacemacs-configuration-layers
variabel Anda .sumber
:branch "my-branch"
.emacs.d/private/local
direktori, dan tambahkan direktori itu ke variabel path-load dengan menambahkan(some-package :location local)
ke daftardotspacemacs-additional-packages
di dalamdotspacemacs/layers
fungsi file dotspacemacs Anda. Setelah menempatkan file paket Anda ke dalam direktori-paket ini file dapat dimuat, tanpa memerlukan path lengkap, dengan menempatkan(require 'package-name)
di dalam tubuhdotspacemacs/user-config
fungsi file dotspacemacs Anda. - dari spacemacs doc