gpt4 book ai didi

emacs - 在 Emacs 中更新软件包

转载 作者:行者123 更新时间:2023-12-03 04:26:50 25 4
gpt4 key购买 nike

我对软件包有以下设置(不确定是否有更好的推荐):

(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
  • 果酱
  • 梅尔帕

Q.3它们添加到package-archives的顺序重要吗?

最佳答案

  1. 为了自动更新软件包列表,仅当尚无软件包列表时,请使用以下内容:

    (when (not package-archive-contents)
    (package-refresh-contents))

    要更新所有已安装的软件包,请输入 package-list-packages,这会将您带到 *Packages* 缓冲区(并且还会更新软件包列表),然后输入 U x

    package-refresh-contents 无条件尝试从您添加到 package-archives 的所有存储库下载软件包列表;如果您已经下载了软件包列表,则 package-archive-contents 不为零。

  2. ELPA 是原创。我认为它不再被真正维护,但我不确定。我没用过。

    GNU 是“官方的”。它与 Emacs 一起维护,这意味着一切应该始终有效,但更新和新软件包不会经常出现。

    Marmalade 基本上是一个网站,您可以在其中上传完整的包,并将其添加到 marmalade 存储库中。您不只是提交到包上游的链接,而且它并不能完全自动创建包。我认为这是正确的事情,因为你不一定想追踪上游。不幸的是,它已经有一段时间没有维护了,但最近有人接管了它,所以它应该会在某个时候回来并且变得更好。

    Melpa 获取一个 URL,例如EmacsWiki lisp 区域或 github 存储库,并从中自动构建一个包。因此,它通常最多比所跟踪的内容晚一天。尽管它跟踪上游,但我在实践中从未遇到过问题,这也是我的大部分包都来自的地方。还有 Melpa Stable,它与 Melpa 类似,但获取上游存储库的标记修订版而不是最新修订版。 Melpa stable 的软件包比 Melpa 少。

    Org 模式 有自己的 package.el 存储库 ( http://orgmode.org/elpa/ )。

    所有软件包存储库的工作方式都是相同的,您只需将它们添加到您的package-archives中即可。

    这里有更深入的blog post关于这个主题,我基本上同意。

  3. 我不确定,但我认为如果一个包在不同的存储库中重复,则存储库在 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 - 在 Emacs 中更新软件包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14836958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com