请问怎么获取 elpa上所有包名,仓库,描述等属性。。。

请问怎么获取 elpa上所有包名,仓库,描述等属性。。。

https://elpa.gnu.org/packages/archive-contents

有能不通过外网的吗

把这个文件保存下来就是变成本地了

你可能问的是一个 X-Y 问题,最好说明获取 archive-contents 用来做什么。

我想尝试写一个 字符UI 的包管理,

获取 elpa 上包

是为做包验证,以及显示一些包的属性

所以想能 elpa 包数据更新,我只需做同步,不能访问外网就获取 elpa 包数据,省得我关注内外网问题

不是外网不外网的问题。

你想要使用 Emacs,就必须访问外网至少一次,以初始化 Emacs 配置。

如果你已经在使用 Emacs,那么所有包的信息都已经读取到变量 package-archive-contents 中了:

(assoc 'company package-archive-contents)
;; =>
;; (company #s(package-desc company
;;                          (20210513 1853)
;;                          "Modular text completion framework"
;;                          ((emacs
;;                            (25 1)))
;;                          tar "melpa" nil
;;                          ((:commit . "34862485c6b8badc98fee29596fe56723dcf6f77")
;;                           (:authors
;;                            ("Nikolaj Schumacher"))
;;                           (:maintainer "Dmitry Gutov" . "[email protected]")
;;                           (:keywords "abbrev" "convenience" "matching")
;;                           (:url . "http://company-mode.github.io/"))
;;                          nil)
;;          #s(package-desc company
;;                          (0 9 13)
;;                          "Modular text completion framework"
;;                          ((emacs
;;                            (24 3)))
;;                          tar "melpa-stable" nil
;;                          ((:commit . "656ad10670512e135a0a5881f127bb7a789ef8ca")
;;                           (:authors
;;                            ("Nikolaj Schumacher"))
;;                           (:maintainer "Dmitry Gutov" . "[email protected]")
;;                           (:keywords "abbrev" "convenience" "matching")
;;                           (:url . "http://company-mode.github.io/"))
;;                          nil)
;;          #s(package-desc company
;;                          (0 9 13)
;;                          "Modular text completion framework"
;;                          ((emacs
;;                            (24 3)))
;;                          tar "gnu" nil
;;                          ((:url . "http://company-mode.github.io/")
;;                           (:maintainer "Dmitry Gutov" . "[email protected]")
;;                           (:authors
;;                            ("Nikolaj Schumacher"))
;;                           (:keywords "abbrev" "convenience" "matching"))
;;                          nil))

可以看看 package-read-all-archive-contents 以及其后续的函数是如何解析包的相关信息,如果你打算做一个独立的 app,也可以借用这些现成的解析函数。

emacs把访问外网后的包信息列表(m-x package-list) 缓存在这个本地文件中 ~/.emacs.d/elpa/archives/melpa/archive-contents ,直接打开这个文件就可以了,楼主可能需要把这个文件转成更通用的数据格式,比如 json

1 个赞