仅限已经安装的包(installed、dependency)。
找了一圈只发现一个七年前的相关项目,但它是针对整个 elpa 的:
(defun get-pkg-reqs-alist ()
(cl-loop for pkg-and-desc in package-alist
for pkg = (car pkg-and-desc)
for desc = (cadr pkg-and-desc)
for req-names = (cl-loop for it in (package-desc-reqs desc) collect (car it))
collect (cons pkg req-names)))
(setq info (get-pkg-reqs-alist))
(with-temp-file "/tmp/g.dot"
(insert "digraph G {")
(insert (mapconcat #'identity
(cl-loop for pkg-reqs in info
for pkg = (car pkg-reqs)
for reqs = (cdr pkg-reqs)
nconcing (cl-loop for req in reqs
collect (format "\"%s\" -> \"%s\";\n" pkg req)))))
(insert "}"))
抛砖引玉,上面的代码可以生成一个 graphviz dot 文件。
感谢感谢!你太棒了!我的本意就是导出一个列表然后用 Graphviz 分析依赖关系。
现在我可以直接学习你的代码,暂时不用绞尽脑汁学其他不着头脑的 elisp 知识了。