Обновление пакетов в Emacs
у меня есть следующие настройки для пакетов (не уверен, если есть лучший рекомендуемый):
(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)
у меня есть три вопроса, связанные с установкой и обновлением пакетов.
Q1. есть ли способ обновить список доступных пакетов (и самые последние версии) и обновить конкретный пакет?
Q. 2 в чем разница между следующими источниками пакет?:
- ELPA,
- GNU
- мармелад
- melpa
Q. 3 имеет ли значение порядок, в котором они добавляются к package-archives?
4 ответов:
для автоматического обновления списка пакетов,только если нет списка пакетов уже использовать следующий:
(when (not package-archive-contents) (package-refresh-contents))чтобы обновить все установленные пакеты, введите
package-list-packages, который приведет вас к*Packages*буфер (а также обновить список пакетов), а затем введите U x.
package-refresh-contentsбезоговорочно пытается загрузить список пакетов из репозиториев, которые вы добавили вpackage-archives;package-archive-contentsне равно нулю, если вы уже загрузили список пакетов.ELPA оригинал. Я не думаю, что это действительно поддерживается больше, но я не уверен. Я им не пользуюсь.
GNU "официальный". Он поддерживается вместе с Emacs, что означает, что все должно всегда работать, но обновления и новые пакеты не приходят очень часто.
мармелад это в основном сайт, где вы можете загрузите полный пакет, и он будет добавлен в репо мармелада. Вы не просто отправляете ссылку на восходящий поток пакета, и это не совсем автоматизирует создание пакета полностью. Я думаю, что это правильно, потому что вы не обязательно хотите отслеживать вверх по течению. К сожалению, он некоторое время не поддерживался, но кто-то недавно взял его на себя, поэтому он должен вернуться и улучшиться в какой-то момент.
Melpa принимает URL-адрес, например, EmacsWiki область lisp или репозиторий github, и автоматически создает пакет из него. Таким образом, он обычно не более чем на день отстает от того, что он отслеживает. Хотя он отслеживает вверх по течению, у меня никогда не было проблем на практике, и именно здесь находятся большинство моих пакетов. Есть также Melpa Stable, который похож на Melpa, но захватывает помеченные ревизии восходящего РЕПО вместо последней ревизии. Конюшня Melpa имеет меньше пакетов чем Melpa.
орг режим есть свой собственный
package.elРЕПО (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))))
в Emacs, используйте
M-x list-packagesперечислить все пакеты, которые будут автоматически обновлять содержимое архива. После этого используйтеUчтобы отметить все обновляемые пакеты для обновления, иxдля фактического выполнения новых обновлений. Затем Emacs получит и установит все обновления,а затем попросит вас удалить старые, устаревшие версии.вы также можете взглянуть на коробка что обеспечивает более удобный способ управления вашей пакеты объявление их в выделенном файле и включает в себя удобный клиент командной строки для автоматической установки и обновления пакетов, объявленных таким образом.
приказом
package-archivesтут не вопрос. Emacs объединяет содержимое всех архивов в единый согласованный список доступных пакетов и их версий, хранящихся вpackage-archive-contents.на
package-install, Emacs просто выберет самую новую версию пакета, независимо от исходного архива. Для получения дополнительной информации о происхождении пакета, MELPA предоставляет melpa package что позволяет создавать пакеты черного или белого списка из указанных архивов.
В терминала:
emacs M-x list-packagesэто помещает вас в буфер * packages*
shift-u xemacs спросит вас (y / n), дождитесь обновлений
C-x k <ret>это убьет буфер* packages * и вернет вас обратно в * scratch*
C-x-C-cэто выйдет из emacs и позволит вам перезапустить via, но вам, возможно, придется отлаживать :(
emacsмой 2¢
это более расширенный комментарий к ответу jpkotta.
это настройка, с которой я экспериментирую для ответа jpkotta выше:
(setq n 0) ; set n as 0 (dolist (pkg pkgs-2b-present) ; for each pkg in list (unless (or ; unless (package-installed-p pkg) ; pkg is installed or (assoc pkg ; pkg is in the archive list package-archive-contents)) (setq n (+ n 1)))) ; add one to n (when (> n 0) ; if n > 0, (package-refresh-contents)) ; refresh packages(вместо
(when (not package-archive-contents) (package-refresh-contents))).список пакетов не обновлялся достаточно часто для моего случая использования.
Я не рассматривал, есть ли более эффективное решение моей проблемы; во-первых, я должен увидеть, исчезнет ли проблема с этой настройкой.
Comments