Mam następującą konfigurację dla pakietów (nie jestem pewien, czy istnieje lepsza zalecana):
(require 'package)
(setq package-archives '(("ELPA" . "http://tromey.com/elpa/")
("gnu" . "http://elpa.gnu.org/packages/")
("marmalade" . "http://marmalade-repo.org/packages/")))
; Apparently needed for the package auto-complete (why?)
(add-to-list 'package-archives
'("melpa" . "http://melpa.milkbox.net/packages/") t)
(package-initialize)
(setq url-http-attempt-keepalives nil)
Mam trzy pytania związane z instalacją i aktualizacją pakietów.
Q1. Czy istnieje sposób zaktualizowania listy dostępnych pakietów (i najnowszych wersji) i zaktualizowania określonego pakietu?
P.2 Jaka jest różnica między następującymi źródłami pakietów ?:
- ELPA,
- GNU ANTYLOPA
- marmolada
- melpa
P.3 Czy ma znaczenie kolejność, w jakiej są dodawane package-archives
?
package-archives
. Pozbądź się archiwum ELPA, które nie jest już obsługiwane, oraz archiwum marmolady, które jest bałaganem przestarzałych i zduplikowanych pakietów bez jasnych wskazówek i konserwacji. Używaj tylko standardowego archiwum GNU i MELPA>(setq package-enable-at-startup nil)
jeśli masz do(package-initialize)
siebie zadzwonić .Odpowiedzi:
Aby automatycznie zaktualizować listę pakietów, tylko jeśli nie ma jeszcze listy pakietów , użyj:
Aby zaktualizować wszystkie zainstalowane pakiety, wpisz
package-list-packages
, co przeniesie Cię do*Packages*
bufora (a także zaktualizuje listę pakietów), a następnie wpisz U x.package-refresh-contents
bezwarunkowo próbuje pobrać listę pakietów ze wszystkich repozytoriów, do których dodałeśpackage-archives
;package-archive-contents
nie jest zerowe, jeśli już pobrałeś listę pakietów.ELPA to oryginał. Nie sądzę, że jest już naprawdę utrzymywany, ale nie jestem pewien. Ja tego nie używam.
GNU jest „oficjalne”. Jest utrzymywany wraz z Emacsem, co oznacza, że wszystko powinno zawsze działać, ale aktualizacje i nowe pakiety nie pojawiają się zbyt często.
Marmolada to w zasadzie strona internetowa, na której można załadować kompletny pakiet i zostanie on dodany do repozytorium marmolady. Nie wystarczy po prostu przesłać łącze do źródła pakietu, a to nie do końca automatyzuje tworzenie pakietu. Myślę, że to właściwa rzecz, ponieważ niekoniecznie chcesz śledzić pod prąd. Niestety od jakiegoś czasu nie był konserwowany, ale ktoś niedawno go przejął, więc w pewnym momencie powinien wrócić i lepiej.
Melpa pobiera adres URL np. Do obszaru lisp EmacsWiki lub repozytorium github i automatycznie buduje z niego pakiet. W związku z tym zwykle jest co najwyżej dzień za tym, co śledzi. Mimo że śledzi w górę, w praktyce nigdy nie miałem problemu i stąd pochodzi większość moich pakietów. Jest też Melpa Stable , która jest podobna do Melpa, ale przechwytuje oznaczone wersje repozytorium głównego zamiast najnowszej wersji. Stajnia Melpa ma mniej pakietów niż Melpa.
Tryb organizacji ma swoje własne
package.el
repozytorium ( http://orgmode.org/elpa/ ).Wszystkie repozytoria pakietów działają tak samo, wystarczy dodać je do pliku
package-archives
.Oto bardziej szczegółowy wpis na blogu na ten temat, z którym w większości się zgadzam.
Nie jestem pewien, ale myślę, że jeśli pakiet jest zduplikowany w różnych repozytoriach, kolejność, w jakiej pojawiają się repozytoria,
package-archives
określa pierwszeństwo. Nie wiem, czy wyższy priorytet znajduje się na początku czy na końcu listy.Aktualizacja: W Emacs 25 jest zmienna
package-archive-priorities
, której możesz użyć do nadania priorytetu repozytorium pakietów (np. Preferuj ELPA zamiast MELPA).Oto odpowiednia sekcja mojej
init.el
, jeśli jesteś zainteresowany:źródło
when (not package-archive-contents)
sprawdza?(refresh-package-contents)
bezwarunkowo przed pobraniem nowych pakietów, ponieważ w przeciwnym razie Emacs może spróbować pobrać starą wersję pakietu (która jest do tego czasu 404), zawieść i zatrzymać ładowanie.W Emacsie użyj,
M-x list-packages
aby wyświetlić listę wszystkich pakietów, co spowoduje automatyczne odświeżenie zawartości archiwum. Następnie użyj,U
aby zaznaczyć wszystkie pakiety, które można uaktualnić,x
do aktualizacji i faktycznie wykonać nowe aktualizacje. Emacs pobierze i zainstaluje wszystkie aktualizacje i zapyta, czy później usunąć stare, przestarzałe wersje.Możesz również rzucić okiem na Carton, który zapewnia wygodniejszy sposób zarządzania pakietami, deklarując je w dedykowanym pliku, i zawiera wygodnego klienta wiersza poleceń do automatycznej instalacji i aktualizacji pakietów zadeklarowanych w ten sposób.
Kolejność
package-archives
nie ma znaczenia. Emacs agreguje zawartość wszystkich archiwów w jedną spójną listę dostępnych pakietów i ich wersji, przechowywanych w plikachpackage-archive-contents
.Po tym
package-install
Emacs po prostu wybierze najnowszą wersję pakietu, niezależnie od archiwum, z którego pochodzi. Aby uzyskać większą kontrolę nad pochodzeniem pakietu, MELPA udostępnia pakiet melpa, który umożliwia umieszczanie na czarnej lub białej liście pakietów z określonych archiwów.źródło
S-u
dokładniej.S-u
? Menu pakietów nie używa tego powiązania.Shift-u
to.W terminalu:
to umieszcza cię w buforze * packages *
emacs zapyta cię (t / n), poczekaj na aktualizacje
to zabije bufor * pakietów * i wróci do * zera *
spowoduje to zamknięcie emacsa i ponowne uruchomienie przez, ale może być konieczne debugowanie :(
moje 2 ¢
źródło
M-x package-refresh-contents
poprosił mnie o wpisanie „U”, aby zaznaczyć wszystkie do aktualizacji, a następnie mogłem wpisać „x”, aby uruchomić aktualizacje.To jest bardziej rozbudowany komentarz do odpowiedzi jpkotta.
To jest korekta, z którą eksperymentuję w odpowiedzi jpkotta powyżej:
(wymiana
(when (not package-archive-contents) (package-refresh-contents))
).Lista pakietów nie odświeżała się wystarczająco często dla mojego przypadku użycia.
Nie zastanawiałem się, czy istnieje skuteczniejsze rozwiązanie mojego problemu; najpierw muszę sprawdzić, czy problem zniknie po tej regulacji.
źródło
package-archive-contents
jest odświeżana tylko wtedy, gdy jej nie ma. Chodzi o to, że kopiujesz plik .emacs.d na nową maszynę i automatycznie instaluje on wszystkie pakiety, ale potem musisz ręcznie zaktualizować. Staram się aktualizować mniej więcej raz na dwa tygodnie. Zgaduję, że dodałeś pakiet do swojej listy, ale byłeśpackage-archive-contents
za stary, aby go mieć?~/.emacs.d/elpa/
lokalizacji pakietów. Jednak moja wersja kodu instalującego pakiet znajduje się na „trzeciej” partycji (e:/emacs-config
lub/e/emacs-config/
). Dlatego dodaję pakiet do listy w jednym systemie operacyjnym i powinien zostać zaktualizowany, gdy załadujęEmacs
w drugim systemie operacyjnym. Na pewno w moim rozwiązaniu jest element przesady, ale przynajmniej wydaje się, że działa.package-archive-contents
wydawało mi się , że jestem tak niefortunny. To jest kwestia, której nie zawęziłem. Jeśli w przyszłości szukam i znajdę „bardziej eleganckie” rozwiązanie, to dodam je do mojego wpisu.(package-refresh-contents)
pisze do~/.emacs.d/elpa/archives
. Nie jest jasne, czy masz ten katalog współdzielony między systemami operacyjnymi. Odradzałbym udostępnianieelpa/
katalogów, ponieważ kod bajtowy Emacsa (kodelpa/
jest kompilowany przez bajtowanie) nie jest kompatybilny wstecz ( gnu.org/software/emacs/manual/html_node/elisp/… ). Musiałbyś upewnić się, że obie instalacje mają tę samą wersję Emacsa. Utrzymuję.emacs.d
kontrolę wersji i synchronizuję z tym różne instalacje.