elisp 中是否有列出 emacs 中当前可用的所有功能的函数?
可用功能是指所有可以用作参数(require 'some-symbol)
而不会出错的符号(即使它们尚未加载)。
有趣的问题。好吧,假设您只是遍历您的load-path
和 grep 之类的东西provide
- 这是您正在寻找的“功能”列表吗?
(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)
...
(运行它提供了在我自己的加载路径中向我显示一些过时目录的好处)。
编辑:这是一个包含布鲁斯和三胞胎建议的小版本:
(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))
有一个变量features
可以做到这一点。
require
随叫随到检查。这一切都在文档中。
尝试查找器:以交互方式,
Ch p 运行命令 finder-by-keyword,它是 `finder.el' 中的交互式自动加载编译 Lisp 函数。
它绑定到 Ch p, <f1> p, <help> p, <menu-bar> <help-menu> <find-emacs-packages>。
(按关键字查找)
查找与给定关键字匹配的包。
或在代码中,finder-keywords-hash
在(load-library "finder-inf")
.