列出所有需要的功能

时间:2013-08-11 15:55:55

标签: emacs elisp

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

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

3 个答案:

答案 0 :(得分:1)

有一个变量features正是如此。 require随叫随到。这完全在文档中。

答案 1 :(得分:1)

尝试使用finder:交互式,

  

C-h p运行命令finder-by-keyword,这是一个交互式的   在`finder.el'中自动加载编译的Lisp函数。

     

它与C-h p结合,< f1>。 p,< help> p,< menu-bar> <帮助-菜单>   <发现-的emacs-软件包>

     

(取景器按关键字)

     

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

或在代码中,finder-keywords-hash之后访问(load-library "finder-inf")

答案 2 :(得分:1)

有趣的问题。好吧,假设您只是遍历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)
...

(运行这个提供了在我自己的加载路径中向我显示一些过时目录的奖励)。

编辑:这是一个包含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))