Emacs 列出所有需要的特性

Emacs 列出所有需要的特性,emacs,elisp,Emacs,Elisp,elisp中是否有列出emacs中当前可用的所有功能的函数 所谓可用特性,我指的是可以用作(需要“某些符号)参数的所有符号,而不会出现错误(即使它们尚未加载)。有一个变量特性,正好可以做到这一点。 require随时检查。都在文档中。尝试查找程序:交互式 C-HP通过关键字运行命令查找器,这是一种交互式 在“finder.el”中自动加载编译的Lisp函数 它与C-hp,p,p结合, (按关键字查找) 查找与给定关键字匹配的包 或者在代码中,在一个(加载库“finder-inf”)有趣的问题之

elisp中是否有列出emacs中当前可用的所有功能的函数


所谓可用特性,我指的是可以用作
(需要“某些符号)
参数的所有符号,而不会出现错误(即使它们尚未加载)。

有一个变量
特性
,正好可以做到这一点。
require
随时检查。都在文档中。

尝试查找程序:交互式

C-HP通过关键字运行命令查找器,这是一种交互式 在“finder.el”中自动加载编译的Lisp函数

它与C-hp,p,p结合,

(按关键字查找)

查找与给定关键字匹配的包


或者在代码中,在一个
(加载库“finder-inf”)
有趣的问题之后访问
finder关键字散列。好吧,假设你只是遍历你的
加载路径
和grep,比如
提供
——这就是你要寻找的“功能”列表吗

(dolist (dirname load-path)
  (shell-command (concat "grep '\(provide' " dirname "/*.el") "tmp")
  (switch-to-buffer "tmp")
  (append-to-buffer "provided" (point-min) (point-max))
  (switch-to-buffer "provided"))


/Users/keith/.emacs.d/slime//hyperspec.el:(provide 'hyperspec)
/Users/keith/.emacs.d/slime//slime-autoloads.el:  (provide 'slime-autoloads))
/Users/keith/.emacs.d/slime//slime.el:(provide 'slime)
/Users/keith/.emacs.d/geiser-0.4/elisp//geiser-autodoc.el:(provide 'geiser-autodoc)
/Users/keith/.emacs.d/geiser-0.4/elisp//geiser-base.el:(provide 'geiser-base)
/Users/keith/.emacs.d/geiser-0.4/elisp//geiser-company.el:(provide 'geiser-company)
/Users/keith/.emacs.d/geiser-0.4/elisp//geiser-compile.el:(provide 'geiser-compile)
/Users/keith/.emacs.d/geiser-0.4/elisp//geiser-completion.el:(provide 'geiser-completion)
/Users/keith/.emacs.d/geiser-0.4/elisp//geiser-connection.el:(provide 'geiser-connection)
...
(运行它可以在我自己的加载路径中显示一些过时的目录)

编辑:这里有一个小版本,包含了Bruce和tripleee的建议:

(defun list-features ()
  (dolist (dirname load-path)
    (shell-command (concat "grep --no-filename --text '\(provide\\|\(autoload' " dirname "/*.(el|elc)") "tmp")
    (switch-to-buffer "tmp")
    (append-to-buffer "features" (point-min) (point-max)))
  ;; Remove duplicates from finding provided functions in both .el and .elc files
  (switch-to-buffer "features")
  (shell-command-on-region (point-min) (point-max) "sort -u" nil t nil nil))

问题是
功能
列出了所有已加载的内容。我需要所有可以加载的东西,即使它还没有加载。我希望有一种方法不需要手动导航加载路径。没有这种方法<代码>功能
列出了提供的功能。除了遍历
加载路径
,无法列出所有可以提供的内容。但Emacs并没有这样做,原因很明显,我实际上需要的是代码列表,而不是交互列表。但这有点帮助。我可以用
finder关键字hash
编译所有包的列表。是的,这就是我要找的东西。但是,请注意,您需要在您的grep中包含已编译的“elc”文件,因为某些源文件不是作为源文件出现的。也许还需要检查您的自动加载?它们可能会指定加载路径之外的路径。当然,任何操纵加载路径的代码都将丢失。@Bruce-好的方面。并且纠正了多余的concats(已编辑)-显然我一直在回想起我头脑中的其他Lisp@tripleee-我想你是对的-这些函数是可用的(因此“功能”),但在第一次调用之前不会实际加载。人们可以添加/定制另一个
grep
来包含这些内容。Emacs有
排序行
,但没有与
排序-u
完全等价的东西;另见