如何获取Emacs lisp非交互功能列表?

时间:2009-03-03 09:49:53

标签: emacs function lisp

如何获得可以在Emacs Lisp中使用的非交互式功能的完整列表?

交互式的很容易在帮助系统中找到,但我想要一个完整的列表,列出我可以使用的所有其他功能。例如concatcarcdr等(最好还有文档)。

由于

编辑:回答感谢Jouni。我对他的回答进行了一些调整,然后对结果进行排序(使用他的代码结果来帮助我找到正确的排序函数!)

(flet ((first-line (text)
                   (if text
                       (substring text 0 (string-match "\n" text))
                     "")))
  (let ((funclist (list)))
    (mapatoms 
     (lambda (x)
       (and (fboundp x)                     ; does x name a function?
            (not (commandp (symbol-function x))) ; is it non-interactive?
            (subrp (symbol-function x))          ; is it built-in?
            (add-to-list 'funclist 
                         (concat (symbol-name x) " - " (first-line (documentation x))
                                 "\n")))))
    (dolist (item (sort funclist 'string<))
      (insert item))))

6 个答案:

答案 0 :(得分:14)

这是基本想法 - 请参阅Emacs Lisp manual了解任何不明确的概念。

(flet ((first-line (text)
         (if text
             (substring text 0 (string-match "\n" text))
           "")))
  (mapatoms 
   (lambda (x)
     (and (fboundp x)                          ; does x name a function?
          (not (commandp (symbol-function x))) ; is it non-interactive?
          (subrp (symbol-function x))          ; is it built-in?
          (insert (symbol-name x) " - " (first-line (documentation x)) "\n")))))

答案 1 :(得分:4)

尝试使用apropos代替apropos-command。这将为您提供所有功能,而不仅仅是交互功能。 C-h a默认绑定到后者,但如果你做了很多elisp黑客攻击,我建议将它绑定到前者。

答案 2 :(得分:1)

你可以检查obarray的内容,虽然它包含所有符号,而不是“所有函数”。

或者,以下可能会做到这一点(将拉入CL兼容包的部分内容):

(减少(lambda(到目前为止)(if(fboundp next)(下一个到目前为止)到目前为止))     obarray     :初始值为零)

答案 3 :(得分:0)

你可能会比look at the website

更糟糕

答案 4 :(得分:0)

尝试使用空输入的apropos命令。

答案 5 :(得分:0)

没关系。事实证明,Ch f(描述函数)确实包含非交互式函数,但我仍然有兴趣找到一种只查看/搜索非交互式函数的方法(特别是只有内置函数)。