Ответ 1
-
Я использую следующее:
(when (not package-archive-contents) (package-refresh-contents))
Выполнение
package-list-packages
также обновит список пакетов.
Вы можете обновить все установленные пакеты с помощью U x в буфере *Packages*
.
-
ELPA - это оригинал. Я не думаю, что это действительно поддерживается, но я не уверен. Я не использую его.
GNU является официальным. Он поддерживается вместе с Emacs, что означает, что все должно всегда работать, но обновления и новые пакеты не приходят очень часто.
Marmalade - это в основном веб-сайт, на котором вы можете загрузить полный пакет, и он будет добавлен в ремарку мармелада. Вы не просто отправляете ссылку на пакет вверх по течению, и не полностью автоматизируете создание пакета полностью. Я думаю, что это правильная вещь, потому что вы не обязательно хотите отслеживать движение вверх по течению. К сожалению, он ненадолго остался ненадолго, но кто-то недавно взял его, поэтому в какой-то момент он должен вернуться и лучше.
Melpa принимает URL-адрес, например. область EmacsWiki lisp или репозиторий github, и автоматически создает пакет из него. Таким образом, обычно, как правило, на целый день отстает от того, что он отслеживает. Несмотря на то, что он отслеживает восходящий поток, на практике у меня никогда не было проблем, и именно с этого и заканчиваются большинство моих пакетов. Существует также Melpa Stable, который похож на Melpa, но задерживает отмеченные изменения восходящего репо вместо последней версии. У Melpa stable меньше пакетов, чем у Melpa.
Режим Org имеет свой собственный
package.el
repo (http://orgmode.org/elpa/).Все репозитории пакетов работают одинаково, вы просто добавляете их в свой
package-archives
.Здесь более подробно сообщение в блоге об этой теме, с которой я в основном согласен.
-
Я не уверен, но я думаю, что если пакет дублируется в разных репозиториях, порядок, в котором репозитории появляются в
package-archives
, определяет приоритет. Я не знаю, есть ли более высокий приоритет в начале или конце списка.Обновление: в Emacs 25 существует переменная
package-archive-priorities
, которую вы можете использовать для определения приоритетов ваших репозиториев пакетов (например, предпочитаете ELPA через MELPA).
Вот соответствующий раздел моего init.el
, если вам интересно:
(setq jpk-packages
'(
ac-dabbrev
...
yasnippet
))
(package-initialize)
(add-to-list 'package-archives
'("melpa" . "http://melpa.org/packages/"))
(add-to-list 'package-archives
'("org" . "http://orgmode.org/elpa/"))
;; install any packages in jpk-packages, if they are not installed already
(let ((refreshed nil))
(when (not package-archive-contents)
(package-refresh-contents)
(setq refreshed t))
(dolist (pkg jpk-packages)
(when (and (not (package-installed-p pkg))
(assoc pkg package-archive-contents))
(unless refreshed
(package-refresh-contents)
(setq refreshed t))
(package-install pkg))))
(defun package-list-unaccounted-packages ()
"Like `package-list-packages', but shows only the packages that
are installed and are not in `jpk-packages'. Useful for
cleaning out unwanted packages."
(interactive)
(package-show-package-list
(remove-if-not (lambda (x) (and (not (memq x jpk-packages))
(not (package-built-in-p x))
(package-installed-p x)))
(mapcar 'car package-archive-contents))))