3

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

可用功能是指所有可以用作参数(require 'some-symbol)而不会出错的符号(即使它们尚未加载)。

4

3 回答 3

2

有趣的问题。好吧,假设您只是遍历您的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))
于 2013-08-11T21:56:37.877 回答
1

有一个变量features可以做到这一点。 require随叫随到检查。这一切都在文档中。

于 2013-08-11T15:57:49.930 回答
1

尝试查找器:以交互方式,

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").

于 2013-08-11T18:44:59.627 回答