Ist es möglich, MELPA und MELPA-Stable gleichzeitig zu verwenden?

29

Ich verwende melpa-stable als zusätzliches Paket-Repository, aber eines der Pakete, die ich gerne verwende (Eiszapfen), ist auf melpa-stable nicht verfügbar. Gibt es eine Möglichkeit, package.el so zu konfigurieren, dass normalerweise melpa-stable verwendet wird, aber melpa für eine bestimmte Teilmenge von Paketen?

Timo Geusch
quelle
1
Upgrade auf Emacs 24.4 ;-)
Malabarba
@ Malabarba, das ist definitiv auf den Karten ...
Timo Geusch
Ich kann auch nicht iciclesauf Melpa finden .
user650654

Antworten:

34

Verwenden Sie die dafür vorgesehene Option package-archive-priorities. Um MELPA Stable gegenüber MELPA zu bevorzugen, fügen Sie Ihrer Init-Datei Folgendes hinzu:

(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)))

Je höher die Zahl, desto höher ist die Priorität eines Paketarchivs. Für jedes Paket, das in mehreren Archiven vorhanden ist, wählt der Paketmanager von Emacs das Paket mit der höchsten Priorität aus dem Archiv aus und ignoriert Pakete in anderen Archiven, auch wenn die Versionsnummer höher ist. Wenn das Paket in zwei Archiven mit der gleichen Priorität vorhanden ist, gewinnt die höhere Versionsnummer, und letztendlich denke ich, die Reihenfolge in package-archives.

Ich empfehle, allen Archiven, einschließlich des Standard-GNU-ELPA-Archivs, explizit eine Priorität zuzuweisen, um Unklarheiten zu vermeiden. Obwohl Archive, die nicht in package-archive-prioritiessind, eine Standardpriorität von 0 haben, ist es allzu leicht, das zu vergessen.

package-archive-priorities wurde in Emacs 25.1 eingeführt. Frühere Versionen finden Sie in der alten Antwort unten:


In Emacs 24 ist es nicht möglich, standardmäßig MELPA Stable zu verwenden und MELPA generell nur für bestimmte Pakete zu verwenden. Ohne Anpassungspaket.el wird standardmäßig das Archiv verwendet, das die höchste Version bereitstellt , nämlich MELPA. Es gibt keine Schnittstelle, um das zu ändern.

package-pinned-packagesAb Emacs 24.4 können Sie mit der neuen Option einzelne Pakete an Archive anheften. Damit können Sie jedoch nur das Gegenteil Ihrer Anforderung implementieren: Standardmäßig MELPA und MELPA Stable für bestimmte Pakete verwenden.

Daher besteht Ihre einzige Option derzeit darin, package-pinned-packagesalle Pakete, die Sie verwenden möchten, entweder manuell oder mit einem Teil des Emacs-Lisp-Codes auszufüllen . Beachten Sie, dass package-pinned-packagesfestgelegt werden muss , bevor aufrufen , package-refresh-contentsweil das Pinning ausgewertet wird , während der Paketindex Aufbau , und nicht , wenn Pakete zu installieren.

Eine langfristige Lösung wäre M-x report-emacs-bug, die Emacs-Entwickler aufzufordern, eine Art "Standardarchiv" -Funktion zu implementieren, oder den Betreuer von Eiszapfen aufzufordern, ordnungsgemäß gekennzeichnete Releases zu erstellen, damit MELPA Stable stabile Pakete dafür erstellen kann. Beides dürfte sich jedoch nicht als einfach herausstellen, da bei ersteren größere Änderungen an package.el erforderlich sind und bei letzteren Eiszapfen von EmacsWiki in ein geeignetes VCS-Repository mit Tags verschoben werden, wozu der Betreuer vermutlich nicht bereit ist, z Wenn sie es wären, hätten sie es vor langer Zeit getan.

Mondhorn
quelle
0

Hier haben Sie eine Diskussion über die parallele Verwendung beider Repositorys. Dies sollte also mit 24.4 möglich sein. hast du zum beispiel mit einem defun versucht die liste der repos zu aktualisieren, dann paradox-erfordern und endlich wieder auf die ursprüngliche repoliste zu kommen?

csantosb
quelle