How do I get a list of Emacs lisp non-interactive

2019-03-11 05:36发布

How do I get a complete list of non-interactive functions that I can use in Emacs Lisp?

The interactive ones are easy enough to find in the help system, but I want a complete list of all the other functions I can use. For example concat, car, cdr, etc. (And preferably with documentation).

Thanks

Ed

Edit: Answered thanks to Jouni. I played around with his answer a bit, and got it to sort the results (using the results of his code to help me find the correct sorting function!)

(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条回答
forever°为你锁心
2楼-- · 2019-03-11 06:20

Try the apropos command with an empty input.

查看更多
Luminary・发光体
3楼-- · 2019-03-11 06:25

Here's the basic idea - see the Emacs Lisp manual for any unclear concepts.

(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")))))
查看更多
放荡不羁爱自由
4楼-- · 2019-03-11 06:29

you could do worse than look at the website

查看更多
劳资没心,怎么记你
5楼-- · 2019-03-11 06:29

Nevermind. It turns out that C-h f (describe function) does include non-interactive functions, though I'd still be interested in finding a way of viewing/searching only the non-interactive ones (especially only the built in ones).

查看更多
倾城 Initia
6楼-- · 2019-03-11 06:37

You could check the contents of obarray, though that contains all symbols, rather than "all functions".

Alternatively, the following may do the trick (will pull in parts of the CL compatability package):

(reduce (lambda (so-far next) (if (fboundp next) (cons next so-far) so-far)) obarray :initial-value nil)
查看更多
啃猪蹄的小仙女
7楼-- · 2019-03-11 06:38

Try apropos instead of apropos-command. That will give you all the functions, not just the interactive ones. C-h a is bound by default to the latter, but if you're doing a lot of elisp hacking, I recommend binding it to the former.

查看更多
登录 后发表回答