Можно ли использовать MELPA и MELPA-stable одновременно?

29

Я использую melpa-stable в качестве дополнительного репозитория пакетов, но один из пакетов, который мне нравится использовать (icicles), недоступен в melpa-stable. Есть ли способ настроить package.el для обычного использования melpa-stable, но использовать melpa для определенного подмножества пакетов?

Тимо Гойш
источник
1
Обновление до emacs 24.4 ;-)
Малабарба
@ Malabarba, это определенно на картах ...
Тимо Geusch
Я тоже не могу найти iciclesна Мелпе.
user650654

Ответы:

34

Используйте опцию, package-archive-prioritiesкоторая была сделана для этой цели. Чтобы предпочесть MELPA Stable, а не MELPA, добавьте в файл инициализации следующее:

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

Чем выше число, тем выше приоритет архива пакета. Для любого пакета, который существует в нескольких архивах, менеджер пакетов Emacs выбирает пакет из архива с самым высоким приоритетом и игнорирует пакеты в других архивах, даже если номер версии выше. Если пакет существует в двух архивах с одинаковым приоритетом, побеждает более высокий номер версии, и в конечном итоге я думаю, что порядок в package-archives.

Я рекомендую явно назначать приоритет всем архивам, включая архив GNU ELPA по умолчанию, чтобы избежать двусмысленности. Хотя архивы, для которых нет, package-archive-prioritiesимеют приоритет по умолчанию 0, слишком легко забыть об этом.

package-archive-priorities была введена в Emacs 25.1, для более ранних выпусков смотрите старый ответ ниже:


В Emacs 24 невозможно по умолчанию использовать MELPA Stable и использовать MELPA только для определенных пакетов. Без какой-либо настройки package.el по умолчанию использует архив с самой высокой версией , а именно MELPA. Нет интерфейса, чтобы изменить это.

Тем не менее, начиная с Emacs 24.4, новая опция package-pinned-packagesпозволяет вам прикреплять отдельные пакеты к архивам, но это только позволяет вам реализовать обратную задачу: по умолчанию использовать MELPA и использовать MELPA Stable для определенных пакетов.

Следовательно, в настоящее время ваш единственный вариант - заполнить package-pinned-packagesвсе пакеты, которые вы хотели бы использовать, либо вручную, либо с помощью некоторого фрагмента кода Emacs Lisp. Обратите внимание, что это package-pinned-packagesдолжно быть установлено перед вызовом, package-refresh-contentsпотому что закрепление оценивается при построении индекса пакета , а не при установке пакетов.

Долгосрочным решением было бы M-x report-emacs-bugпопросить разработчиков Emacs реализовать какую-то функцию «архива по умолчанию» или попросить сопровождающего сословия сделать выпуски с соответствующей маркировкой, чтобы MELPA Stable могла создавать стабильные пакеты для него. Однако ни то, ни другое может оказаться непростым делом, поскольку первое требует больших изменений в package.el, а второе - сосульки перемещаются из EmacsWiki в какой-то правильный репозиторий VCS с тегами, что, как я полагаю, его сопровождающий не желает делать, для если бы они были, они бы сделали это давно.

lunaryorn
источник
0

Здесь у вас есть обсуждение по поводу использования обоих репозиториев параллельно, так что это должно быть возможно с 24.4; вы пробовали, например, с defun обновить список репозиториев, затем paradox-require и, наконец, вернуться к первоначальному списку репо?

csantosb
источник