Czy można jednocześnie używać zarówno MELPA, jak i stabilnego MELPA?

29

Używam stabilnej dla melpy jako dodatkowego repozytorium pakietów, ale jeden z pakietów, których lubię używać (sople), nie jest dostępny dla stabilnej dla melpy. Czy jest jakiś sposób, aby skonfigurować pakiet.el tak, aby normalnie używał stabilnej dla Melpy, ale używałby Melpy dla określonego podzbioru pakietów?

Timo Geusch
źródło
1
Aktualizacja do emacsa 24.4 ;-)
Malabarba
@Malabarba, to zdecydowanie na kartach ...
Timo Geusch
Nie mogę też znaleźć iciclesmelpy.
user650654

Odpowiedzi:

34

Skorzystaj z opcji, package-archive-prioritiesktóra została stworzona do tego właśnie celu. Aby preferować stabilną wersję MELPA niż MELPA, dodaj następujące pliki do pliku init:

(setq package-archives
      '(("GNU ELPA"     . "https://elpa.gnu.org/packages/")
        ("MELPA Stable" . "https://stable.melpa.org/packages/")
        ("MELPA"        . "https://melpa.org/packages/"))
      package-archive-priorities
      '(("MELPA Stable" . 10)
        ("GNU ELPA"     . 5)
        ("MELPA"        . 0)))

Im wyższy numer, tym wyższy priorytet archiwum pakietu. W przypadku każdego pakietu, który istnieje w wielu archiwach, menedżer pakietów Emacsa wybiera pakiet z archiwum o najwyższym priorytecie i ignoruje pakiety w innych archiwach, nawet jeśli numer wersji jest wyższy. Jeśli pakiet istnieje w dwóch archiwach o tym samym priorytecie, wyższy numer wersji wygrywa, a ostatecznie myślę, że kolejność w package-archives.

Zalecam jawne przypisanie priorytetu wszystkim archiwom, w tym domyślnemu archiwum GNU ELPA, aby uniknąć niejasności. Chociaż archiwa, które nie package-archive-prioritiesmają domyślnego priorytetu 0, zbyt łatwo o tym zapomnieć.

package-archive-priorities został wprowadzony w Emacsie 25.1, dla wcześniejszych wydań zobacz starą odpowiedź poniżej:


W Emacsie 24 domyślnie nie jest możliwe ustawienie MELPA Stable i używanie MELPA tylko dla określonych pakietów w ogólny sposób. Bez żadnego pakietu dostosowywania. Domyślnie archiwum udostępnia najwyższą wersję , czyli MELPA. Nie ma interfejsu, aby to zmienić.

Jednak od Emacsa 24.4 nowa opcja package-pinned-packagesumożliwia przypinanie poszczególnych pakietów do archiwów, ale pozwala to na implementację odwrotności twojego wymagania: Domyślnie na MELPA i użycie MELPA Stabilny dla określonych pakietów.

Dlatego obecnie jedyną opcją jest wypełnienie package-pinned-packageswszystkich pakietów, których chcesz użyć, ręcznie lub przy pomocy kodu Emacsa Lisp. Uwaga: package-pinned-packagesnależy to ustawić przed wywołaniem, package-refresh-contentsponieważ przypinanie jest oceniane podczas budowania indeksu pakietu , a nie podczas instalowania pakietów.

Długofalowym rozwiązaniem byłoby M-x report-emacs-bugpoproszenie programistów Emacsa o zaimplementowanie jakiejś funkcji „domyślnego archiwum” lub poproszenie opiekuna sopli o wykonanie odpowiednio oznakowanych wydań, aby MELPA Stable mógł zbudować dla niego stabilne pakiety. Żadne też nie może okazać się łatwe, ponieważ pierwszy wymaga większych zmian w package.el, a drugi, że sople są przenoszone z EmacsWiki do odpowiedniego repozytorium VCS z tagami, co, jak sądzę, jego opiekun nie jest skłonny zrobić, ponieważ gdyby byli, zrobiliby to dawno temu.

księżycowy
źródło
0

Tutaj masz dyskusję na temat korzystania z obu repozytoriów równolegle, więc powinno to być możliwe w 24.4; próbowałeś na przykład z defunsem zaktualizować listę repozytoriów , a następnie wymagać paradoksu i wreszcie wrócić do oryginalnej listy repozytoriów?

csantosb
źródło