Emacs 如何获得通过软件包安装的插件版本?

Emacs 如何获得通过软件包安装的插件版本?,emacs,package,version,Emacs,Package,Version,使用elisp,如何获取由Emacs软件包管理工具-package安装的软件包的版本?一定有办法做到这一点,因为版本信息是在list packages创建的包缓冲区中给出的 (defun get-package-version (name) (when (member name package-activated-list) (package-desc-vers (cdr (assoc name package-alist))))) 大多数软件包版本存储为[主版本-次版本]列表。从

使用elisp,如何获取由Emacs软件包管理工具-package安装的软件包的版本?一定有办法做到这一点,因为版本信息是在
list packages
创建的包缓冲区中给出的

(defun get-package-version (name)
  (when (member name package-activated-list)
    (package-desc-vers (cdr (assoc name package-alist)))))
大多数软件包版本存储为
[主版本-次版本]
列表。从GitHub构建的Melpa包使用时间格式
[YYYYMMDD hhmm]
如果您需要这些列表中的字符串,可以执行以下操作:

(defun* package-version-string ((major minor))
  (format "%s.%s" major minor))

(package-version-string (get-package-version 'pep8))  ; => "1.2"
更新:要获取未安装的软件包,我们可以测试
软件包存档内容的成员资格,如下所示:

(defun get-not-installed-packages ()
  (remove-if (lambda (x) (assoc (car x) package-alist)) package-archive-contents))

(defun get-not-installed-package-version (name)
  (let ((pkg (assoc name (get-not-installed-packages))))
    (when pkg
      (package-desc-vers (cdr pkg)))))

谢谢您知道如何获取未安装软件包的版本吗?请将
when
更改为
,除非
。据我所知,“软件包激活列表”包含所有已安装的软件包。这不起作用<代码>软件包列表
也仅包含已安装的软件包。